home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / documents / RFC / rfc929.txt < prev    next >
Text File  |  1994-08-01  |  135KB  |  3,193 lines

  1.  
  2.  
  3. Network Working Group                              Joel Lilienkamp (SDC)
  4. Request for Comments: 929                          Richard Mandell (SDC)
  5.                                          Michael Padlipsky (Mitre Corp.)
  6.                                                            December 1984
  7.  
  8.                     PROPOSED HOST-FRONT END PROTOCOL
  9.  
  10.  
  11. Status Of This Memo
  12.  
  13.    The reader should be aware of several things in regard to what the
  14.    present document is up to.  First and foremost, IT IS A PROPOSAL FOR
  15.    A STANDARD, NOT A STANDARD ITSELF.  Next, it assumes that the
  16.    separate document, RFC 928, which is an introduction to the present
  17.    document, has been read before it is. Next, it should be understood
  18.    that "final cut" over this version of the document has been exercised
  19.    by the author of RFC 928, not by the primary author of the present
  20.    document, so any readers bothered by style considerations should feel
  21.    free to blame the former, who's used to it, rather than the latter,
  22.    who may well be guiltless.  (Editing at a distance finally become too
  23.    hard to manage, so if I'm typing it myself I'm going to fiddle with
  24.    it myself too, including, but not limited to, sticking my own section
  25.    on the Conceptual Model in before Joel's words start, rather than
  26.    leaving it in the Introduction.  MAP)
  27.  
  28.    Finally, it should be noted that this is not a finished document.
  29.    That is, the intent is eventually to supply appendices for all of the
  30.    protocol offloadings, describing their uses of protocol idiosyncratic
  31.    parameters and even their interpretations of the standard per-command
  32.    parameters, but in order to get what we've got into circulation we
  33.    haven't waited until all such appendices have been written up.  (We
  34.    do have notes on how to handle FTP, e.g., and UDP will be pretty
  35.    straightforward, but getting them ready would have delayed things
  36.    into still another calendar year, which would have been very annoying
  37.    ... not to say embarrassing.) For that matter, it's not even a
  38.    finished document with respect to what is here. Not only is it our
  39.    stated intention to revise the protocol based upon implementation
  40.    experience gained from volunteer test implementations, but it's also
  41.    the case that it hasn't proven feasible to iron out all known
  42.    wrinkles in what is being presented.  For example, the response codes
  43.    almost certainly need clarification and expansion, and at least one
  44.    of us doesn't think mandatory initial parameters need control flags.
  45.    However, to try too hard for polish would be to stay in subcommittee
  46.    for the better part of forever, so what you see is what we've got,
  47.    but certainly isn't meant to be what you or we are stuck with.
  48.  
  49.    This RFC suggests a proposed protocol for the ARPA-Internet
  50.    community, and requests discussion and suggestions for improvements.
  51.    Distribution of this memo is unlimited.
  52.  
  53.  
  54.  
  55.  
  56. Lilienkamp & Mandell & Padlipsky                                [Page 1]
  57.  
  58.  
  59.  
  60. RFC 929                                                    December 1984
  61. Proposed Host-Front End Protocol
  62.  
  63.  
  64. Conceptual Model
  65.  
  66.    There are two fundamental motivations for doing outboard processing.
  67.    One is to conserve the Hosts' resources (CPU cycles and memory) in a
  68.    resource sharing intercomputer network, by offloading as much of the
  69.    required networking software from the Hosts to Outboard Processing
  70.    Environments (or "Network Front-Ends") as possible. The other is to
  71.    facilitate procurement of implementations of the various
  72.    intercomputer networking protocols for the several types of Host in
  73.    play in a typical heterogeneous intercomputer network, by employing
  74.    common implementations in the OPE.  A third motivation, of basing a
  75.    network security approach on trusted mandatory OPEs, will not be
  76.    dealt with here, but is at least worthy of mention.
  77.  
  78.    Neither motivation should be allowed to detract from the underlying,
  79.    assumed desire to perform true intercomputer networking, however.
  80.    Therefore, it is further assumed that OPEs will be attached to Hosts
  81.    via a flexible attachment strategy, as described in [1]. That is, at
  82.    the software level an explicit Host-Front End Protocol (H-FP) will be
  83.    employed between Hosts and OPEs, rather than having OPEs emulate
  84.    devices or device controllers already "known" to Host operating
  85.    systems (in order to avoid introducing new code into the Host).
  86.  
  87.    For reasons discussed in the Introduction, an H-FP resolves into
  88.    three layers.  The Link layer enables the exchange of bits between
  89.    Host and OPE.  The Channel layer enables the bit streams to be
  90.    demultiplexed and flow controlled  (both the Channel and Link layers
  91.    may use preexisting per-Host mechanizations, it should be recalled).
  92.    The Command (or "Service Access") layer is our primary concern at
  93.    present. It serves as the distributed processing mechanism which
  94.    allows processes on Hosts to manipulate protocol interpreters (PIs)
  95.    in OPEs on their behalf; for convenience, it will be referred to as
  96.    "the H-FP" here.  (It should be noted that the Link and Channel
  97.    layers may be viewed as roughly equivalent to the inboard processing
  98.    investment for a Host-comm subnet processor PI and device driver, so
  99.    in practical terms the savings of resources achieved by outboard
  100.    processing come from making the H-FP "smaller" than the inboard
  101.    implementations of the protocols it allows to be offloaded.)
  102.  
  103.    The crucial property of the H-FP conceptually is that it stands as
  104.    the interface between a (Host) process and a PI (which is actually
  105.    outboard).  Usually, the model is that of a closed subroutine
  106.    interface, although in some cases an interprocess communication
  107.    mechanism model must be appealed to.  That is, the interactions
  108.    between cooperating H-FP PIs in some sense mimic subroutine or IPC
  109.    calls, from the perspective of Host processes calling upon their own
  110.    H-FP PIs, which in turn are of course interfacing via just such
  111.  
  112.  
  113. Lilienkamp & Mandell & Padlipsky                                [Page 2]
  114.  
  115.  
  116.  
  117. RFC 929                                                    December 1984
  118. Proposed Host-Front End Protocol
  119.  
  120.  
  121.    mechanisms themselves. Another way of putting it is that "if the
  122.    protocols were inboard," the processes invoking H-FP wouldn't know
  123.    the difference.  H-FP, then, may be viewed as a roundabout way of
  124.    letting Host processes "get at" various PIs.
  125.  
  126.    Naturally, the mechanization of the desired concept cannot be
  127.    particularly literal.  After all, the Hosts and the OPEs are
  128.    different processors, so we're not envisioning a passing through of
  129.    parameters in an exact fashion.  However, in broad terms the model is
  130.    just that of a somewhat funny interface between a process and a PI.
  131.    (This should not be construed as ruling out the occurrence of events
  132.    which prompt the OPE to initiate an exchange of commands with the
  133.    Host, though; see the Introduction for more on the topic of
  134.    "Symmetric Begins.")
  135.  
  136. Interaction Discipline
  137.  
  138.    The interaction between the Host and the OPE must be capable of
  139.    providing a suitable interface between processes (or protocol
  140.    interpreters) in the Host and the off-loaded protocol interpreters in
  141.    the OPE.  This interaction must not, however, burden the Host more
  142.    heavily than would have resulted from supporting the protocols
  143.    inboard, lest the advantage of using an OPE be overridden.
  144.  
  145.    Channel Level Interaction
  146.  
  147.    As stated elsewhere, the Channel level protocol (implicitly in
  148.    conjunction with the Link level) provides two major functions. These
  149.    are demultiplexing the traffic from the Link level into distinct data
  150.    streams, and providing flow control between the Host and the OPE on a
  151.    per stream basis.  These hold even if the Host-OPE attachment is DMA.
  152.  
  153.    The data streams between the Host and the OPE are bidirectional. In
  154.    this document, the basic unit of data transferred by the Channel
  155.    level is referred to as a "chunk".  The primary motivation for this
  156.    terminology is that the H-FP permits the Channel level to be one of
  157.    several possible protocols, each with its own terminology.  For
  158.    example, a chunk on an X.25 Channel would be a packet, while a chunk
  159.    on the DTI H-FP channel would be a message.  While the Command level
  160.    is, in a sense, "more efficient" when the chunk size is permitted to
  161.    be large, the flexibility permitted in the choice of protocols at the
  162.    Channel level precludes any assumptions about the chunk size.
  163.  
  164.    Each data stream is fully asynchronous.  A Channel protocol user can
  165.    send data at any time, once the channel has been properly opened.
  166.    (The Command level's logic may render some actions meaningless,
  167.    however.) The data transfer service provided by the Channel protocol
  168.  
  169.  
  170. Lilienkamp & Mandell & Padlipsky                                [Page 3]
  171.  
  172.  
  173.  
  174. RFC 929                                                    December 1984
  175. Proposed Host-Front End Protocol
  176.  
  177.  
  178.    is reliable;  this entails delivery in the correct order, without
  179.    duplication, and checked for bit errors.  All retransmission, error
  180.    checking, and duplicate detection is provided by this protocol in a
  181.    way that is transparent to the user.  (If the attachment is DMA,
  182.    stream identification and chunk length must still be provided for.)
  183.  
  184.    The flow control at the Channel level is provided to prevent the OPE
  185.    and the Host from overloading each other's resources by excessive
  186.    transmissions.  In general, this flow control should not directly
  187.    affect the outboard protocol interpreters' operation.  On the other
  188.    had, this flow control has the same effect as explicit interface
  189.    events that provide flow control between the user and the protocol
  190.    interpreter (e.g., the Allocate event of the interface specification
  191.    for TCP found in MIL-STD 1778).  Hence, such events do not need to be
  192.    communicated explicitly at the Command level.  (If the attachment is
  193.    DMA, flow control must still be provided for.)
  194.  
  195.    Should Hosts require an OPE to be attached via a Link Level that
  196.    furnishes physical demultiplexing (e.g., a group of RS232 ports), any
  197.    attempt to avoid furnishing reliability and explicit flow control, is
  198.    done at their peril;  we have not chosen to assist such an
  199.    enterprise, but neither have we precluded it.  (It would certainly
  200.    violate the spirit of the thing, however.)
  201.  
  202.    Command Level Interaction
  203.  
  204.    The approach chosen for this H-FP is to base the interaction on a
  205.    small set of commands, separately applicable to a given Channel Level
  206.    channel. The commands are simple, but sufficiently flexible to permit
  207.    the off-loading of the interpreters of the large number of protocols
  208.    at various levels in the hierarchy.  This flexibility is made
  209.    possible in part by the similar nature of the interfaces to most
  210.    protocols, combined with the provision of "protocol idiosyncratic
  211.    parameters". These parameters are defined for each offloaded protocol
  212.    interpreter in the OPE.  The use of such parameters does not
  213.    complicate the basic design of the OPE, since it must be customized
  214.    for each off-loaded protocol anyway, and all that is required of the
  215.    OPE for those parameters is to pass them to the off-loaded protocol
  216.    interpreter.  Hence, an interface tailored to a particular protocol
  217.    can be created in a straightforward and cost-effective way.
  218.  
  219.    The command dialog is more or less asynchronous.  Commands can be
  220.    issued at any particular time (except when there is a pending
  221.    command, which will be discussed below), and there is no need for
  222.    dummy traffic on a channel when no commands are issued.
  223.  
  224.    Associated with each command is a response.  The purpose of this
  225.  
  226.  
  227. Lilienkamp & Mandell & Padlipsky                                [Page 4]
  228.  
  229.  
  230.  
  231. RFC 929                                                    December 1984
  232. Proposed Host-Front End Protocol
  233.  
  234.  
  235.    response is to indicate, at some level that depends in part on the
  236.    particular protocol interpreter that is offloaded to the OPE, whether
  237.    the command was successfully executed, and if unsuccessful, the
  238.    reason.  Often, generating the response involves interaction with the
  239.    protocol interpreter before a response can be generated.
  240.  
  241.    When a command is issued, the issuer must wait for a response before
  242.    another command is issued.  The nature of the communication between
  243.    the Host and the OPE is thus a lock step command/response dialog.
  244.    There are two major exceptions to this principle, however. One
  245.    exception is the abrupt form of the End command, which can be issued
  246.    at any time to cancel any previously issued commands, and indicate
  247.    that services are no longer desired.  The other exception is the
  248.    Signal command.  Since a Signal is out-of-band and usually of high
  249.    importance, forcing it to wait on a response would be undesirable.
  250.    Hence, a Signal command can be issued while commands (other than
  251.    Signal) are pending.  However, a Signal command should not be issued
  252.    before a successful response to the Begin command has been received.
  253.    Since it is possible for more than one command of different types to
  254.    be pending at one time, a mechanism to distinguish responses is
  255.    needed.  Since there are never two commands of the same type pending,
  256.    including the command name in the response is sufficient to make this
  257.    distinction.
  258.  
  259.    A special case command is the Transmit command.  Details of the
  260.    Transmit command are provided in the next section. Essentially, the
  261.    Transmit command is used to invoke the data transfer services of the
  262.    off-loaded protocol (when issued by the Host) or to indicate the
  263.    arrival of new data from the network (when issued by the OPE).  The
  264.    nature of specific protocol interfaces for these events varies widely
  265.    between protocols.  Some may block until the data is accepted by the
  266.    remote counterpart (or "peer") protocol interpreter, while others may
  267.    not.  Hence, there is a special parameter which indicates the nature
  268.    of the Transmit command interface.  It can either require that the
  269.    response should be generated immediately after determining the
  270.    Transmit command is complete and formed properly, or can indicate
  271.    that the response should not be generated until the appropriate
  272.    interface event is given by the remote protocol interpreter.  The
  273.    default action for all Transmit commands can be initialized using the
  274.    Begin command and changed using the Condition command.  Also, the
  275.    default action can be temporarily overridden by specifying a
  276.    parameter with the Transmit command. The net result of this mechanism
  277.    is to allow the Host to determine within reason just how lock-stepped
  278.    transmissions are to be.  (It is assumed that the usual case will be
  279.    to transfer the burden of buffering to the OPE by taking immediate
  280.    responses, provided that doing so "makes sense" with the particular
  281.    offloaded protocol in play.)
  282.  
  283.  
  284. Lilienkamp & Mandell & Padlipsky                                [Page 5]
  285.  
  286.  
  287.  
  288. RFC 929                                                    December 1984
  289. Proposed Host-Front End Protocol
  290.  
  291.  
  292.    Some protocols provide a block-oriented data transfer service rather
  293.    than a stream-oriented one.  With such a service, the data associated
  294.    with a transfer request is viewed as an integral unit.  For actual
  295.    network transmission, the protocol may permit these units to be
  296.    grouped or fragmented. However, the receiving end must deliver the
  297.    data in the original, integral units. Protocols that conform to this
  298.    model include some datagram protocols such as IP and UDP, and also
  299.    some connection protocols such as NBS TP.
  300.  
  301.    To cater to these types of protocols, it is a convention that
  302.    commands, their parameters, and any associated data be transferred
  303.    between the Host and the OPE in a single chunk. Any data associated
  304.    with an H-FP command is viewed as an integral unit which is used in
  305.    the corresponding service request given to the outboard protocol
  306.    interpreter or delivered as a complete unit to the process in the
  307.    Host. Operation of stream-oriented protocols such as TCP will not be
  308.    adversely affected by this convention.
  309.  
  310.    To accommodate Channel protocols that do not provide for arbitrarily
  311.    large chunks, a mechanism at the Command level is required to permit
  312.    the linking of multiple chunks into a single command, in order to
  313.    transfer the burden of buffering as much as possible from the Host to
  314.    the OPE.  The facility proposed here would consist of an indication
  315.    at the beginning of each chunk which would distinguish integral
  316.    commands, fragments of a command for which more fragments are yet to
  317.    arrive, and the final fragment of a command.  The details of this
  318.    mechanism are discussed in the section on the syntax of commands and
  319.    responses.
  320.  
  321.    It is a convention for this H-FP that any data associated with a
  322.    command must start on a word boundary (as defined by the local
  323.    system).  Consequently, there is a need to provide padding within the
  324.    commands.  Such padding is used only to fill to the next appropriate
  325.    boundary, and has no semantic significance to the command interpreter
  326.    (i.e., two commands that are identical except for the amount of
  327.    padding should behave identically).  The details of this padding are
  328.    discussed in the section on the syntax of commands and responses.
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339.  
  340.  
  341. Lilienkamp & Mandell & Padlipsky                                [Page 6]
  342.  
  343.  
  344.  
  345. RFC 929                                                    December 1984
  346. Proposed Host-Front End Protocol
  347.  
  348.  
  349. Syntax Rules
  350.  
  351.    At the Command Level, communication between the Host and the OPE
  352.    takes the form of commands and responses.  A command is a request for
  353.    some particular action, and the response indicates the success or
  354.    failure of performing the requested action.
  355.  
  356.    All commands and responses are coded in ASCII characters. (Nothing
  357.    precludes OPEs from accepting EBCDIC from Hosts that use it in native
  358.    mode, but that is not required.) These characters are sent in some
  359.    way convenient for the Host, and the OPE is sufficiently flexible to
  360.    interpret them.  (i.e., OPEs are expected to accommodate Host
  361.    idiosyncracies in regard to such things as use of 7-bit ASCII in a
  362.    9-bit field.) This approach offers several advantages:
  363.  
  364.    Adaptabilities in most Hosts:  Most Hosts have the ability to
  365.    generate and interpret ASCII character streams.  Hence, integrating
  366.    H-FP into a Host will not require difficult software.
  367.  
  368.    Script generation:  Generation of test and operational command
  369.    scripts will be simplified, since they will not need to contain
  370.    special characters.
  371.  
  372.    Terminal Operation:  Using simple command streams simplifies the
  373.    conversion of an OPE to a generic virtual terminal support machine.
  374.    This is particularly useful during development and testing.
  375.  
  376.    Testing:  Testing will not require special hardware to interpret
  377.    commands and responses.  A terminal or data line analyzer would be
  378.    adequate.
  379.  
  380.    The specific format for the commands and responses will be discussed
  381.    in the sections that follow. In those sections, the quote character
  382.    is used to indicate strings.  The symbols "<" and ">" (referred to as
  383.    angle brackets) are used as meta-characters.
  384.  
  385.    Syntax of Commands
  386.  
  387.    As alluded to in the section discussing the interaction discipline
  388.    between the Host and the OPE, a function is provided by which a chunk
  389.    can be used to carry either a complete command or a fragment of a
  390.    command.  The mechanism chosen to provide this function entails use
  391.    of the first character position in the chunk as a chunk usage
  392.    identifier.  The character "C" in the first position indicates a
  393.    chunk containing a single, complete command.  "F" in the first
  394.    position indicates a chunk which is the first part of a multichunk
  395.    command. "M" in the first position indicates the chunk is a middle
  396.  
  397.  
  398. Lilienkamp & Mandell & Padlipsky                                [Page 7]
  399.  
  400.  
  401.  
  402. RFC 929                                                    December 1984
  403. Proposed Host-Front End Protocol
  404.  
  405.  
  406.    part (neither the first nor the last chunk) of a command.  Finally,
  407.    "L" indicates the chunk is the last chunk of a multi-chunk command.
  408.    Hence, the following sequences of chunks (the letter corresponds to
  409.    the chunk usage identifier in each chunk, and the angle brackets
  410.    enclose a chunk) are legal:
  411.  
  412.       <C>
  413.       <F><L>
  414.       <F><M><M><L>
  415.  
  416.    while the following are not legal:
  417.  
  418.       <L>
  419.       <M><L>
  420.       <F><C>
  421.  
  422.    Tactics for handling multiple chunks with regard to OPE buffering
  423.    limits are left to the ingenuity of OPE builders. The spirit is to
  424.    take as much as you can, in order to relieve the Host of the
  425.    necessity of buffering itself.
  426.  
  427.    A command always begins immediately following the indicator
  428.    character, with possible intervening spaces.  This implies a chunk
  429.    can contain at most one complete command.  The end of the command
  430.    (not including the data) is signified by a newline (denoted as <nl>
  431.    in this document) that does not appear inside a quoted string (see
  432.    below).  The end of the data is designated by the end of the last
  433.    chunk.
  434.  
  435.    Commands take the form of an ASCII string.  The command identifier is
  436.    the first word of the chunk.  It consists of at least the first two
  437.    letters of the command, in either upper or lower case (e.g., the
  438.    sequences "BE", "Be", "bE", and "be" all identify the Begin command).
  439.    Additional letters of the command name can be included if desired to
  440.    aid readability of the command stream.
  441.  
  442.    Following the command identifier is a list of parameters. These
  443.    parameters are also represented as ASCII strings, although the
  444.    specific format will depend on the particular parameter.  The data to
  445.    be transmitted is not considered a control parameter, however, and
  446.    need not be ASCII data.
  447.  
  448.    Parameters are separated by one or more spaces.  Tabs, newlines, and
  449.    other white space are not legal parameter separators.
  450.  
  451.    Parameter strings may be quoted, using the character <">. Any
  452.  
  453.  
  454.  
  455. Lilienkamp & Mandell & Padlipsky                                [Page 8]
  456.  
  457.  
  458.  
  459. RFC 929                                                    December 1984
  460. Proposed Host-Front End Protocol
  461.  
  462.  
  463.    characters between the <"> characters are a part of the parameter,
  464.    including spaces and newlines.  The character <"> that is part of the
  465.    parameter is represented inside a quoted string as <"">.
  466.  
  467.    The order in which the parameters appear within the command is
  468.    significant to their interpretation by the Host and by the OPE.
  469.    Optional parameters may be skipped by using the characters ",," to
  470.    indicate a NULL parameter.  Such a NULL parameter takes its default
  471.    value.  Alternatively, each parameter has a MULTICS/UNIX style
  472.    Control Argument/Flag associated with it that can be used to identify
  473.    the parameter, without placing NULL parameters for each parameter
  474.    skipped.  This flag consists of one or two ASCII characters, and
  475.    either upper or lower case may be used.  For example, if the fourth
  476.    parameter of a command had a flag of "-p" and the user wished the
  477.    first three parameters to be null, he could use:
  478.  
  479.       command -p value
  480.  
  481.    or
  482.  
  483.       command -P value
  484.  
  485.    instead of
  486.  
  487.       command ,, ,, ,, value
  488.  
  489.    if it were more convenient for the Host to do so.  Flagged parameters
  490.    must still appear in the correct sequence within the command,
  491.    however.
  492.  
  493.    There may be data associated with some of the commands.  Any such
  494.    data is placed into the chunk following all the parameters and the
  495.    unquoted newline. Padding can be provided by placing spaces between
  496.    the end of the final parameter string and the newline, so that data
  497.    begins on a word boundary. The OPE will always pad to a host word
  498.    boundary.  Padding by hosts is optional.
  499.  
  500.    Syntax of Responses
  501.  
  502.    Responses are actually just a special form of a command.  It is
  503.    anticipated that all responses would fit into a single channel chunk,
  504.    although the mechanisms described for multichunk commands can
  505.    certainly be used in responses.  The ASCII string used to uniquely
  506.    identify the response command is "RE" ("Re", "rE", and "re" are also
  507.    permitted).
  508.  
  509.    After the response command identifier is the original command
  510.  
  511.  
  512. Lilienkamp & Mandell & Padlipsky                                [Page 9]
  513.  
  514.  
  515.  
  516. RFC 929                                                    December 1984
  517. Proposed Host-Front End Protocol
  518.  
  519.  
  520.    identifier, so the response can be associated with the proper
  521.    command.  Following this identifier is a three ASCII digit response
  522.    code, a set of protocol idiosyncratic parameters, and a textual
  523.    message.  The protocol idiosyncratic parameters are used to transfer
  524.    interface information between the Host and the OPE, and may not be
  525.    needed when off-loading some protocol interpreters.  The textual
  526.    message is intended for human interpretation of the response codes,
  527.    and is not required by the protocol.  The three digits uniquely
  528.    identify the semantics of the response, at least within the context
  529.    of a particular command and particular outboarded protocol
  530.    interpreter.
  531.  
  532.    Responses are numerically grouped by the type of information they
  533.    convey.  The first digit identifies this group, and the last two
  534.    digits further qualify the reply.  The following list illustrates
  535.    this grouping.
  536.  
  537.       0XX Successful:  The command was executed successfully. The
  538.           response code may contain further information.
  539.  
  540.       1XX Conditional Success:  The command was executed successfully,
  541.           but not exactly according to the service and flow control
  542.           suggestions.  If those suggestions were particularly important
  543.           to the requester, he may wish to issue an End command.  The
  544.           response code contains information on what suggestion or
  545.           suggestions could not be followed.
  546.  
  547.       2XX Command Level Error:  An error at the command level has
  548.           occurred.  This could include requesting services of a
  549.           protocol not supported, or a problem in the way those services
  550.           were requested.  This level does not include problems with the
  551.           syntax of the command or its parameters.
  552.  
  553.       3XX Syntax and Parameter Errors:  An error in the syntax of the
  554.           command or a problem with one of its parameters has occurred.
  555.           A problem with a parameter may be other than syntactical, such
  556.           as illegal address.
  557.  
  558.       4XX Off-loaded Protocol Interpreter Problems:  Some problem with
  559.           the particular off-loaded protocol has occurred.
  560.  
  561.       5XX Local OPE Internal Problems:  Problems, such as insufficient
  562.           OPE resources, or problems with OPE to subnet interface.
  563.  
  564.       6XX Security Problem:  Some problem with Host, network, or OPE
  565.           security has occurred.  The response code indicates the
  566.           problem.
  567.  
  568.  
  569. Lilienkamp & Mandell & Padlipsky                               [Page 10]
  570.  
  571.  
  572.  
  573. RFC 929                                                    December 1984
  574. Proposed Host-Front End Protocol
  575.  
  576.  
  577.       7XX Reserved for Future Expansion
  578.  
  579.       8XX Reserved for Future Expansion
  580.  
  581.       9XX Protocol Idiosyncratic Errors:  Some error occurred that is
  582.           idiosyncratic to the particular off-loaded protocol being
  583.           used.  The response code indicates the error.
  584.  
  585. Description of the Commands
  586.  
  587.    As stated above, communication between the Host and the OPE at the
  588.    Command Level is accomplished using commands and responses.  Commands
  589.    may be issued by either the Host or the OPE, and are used to
  590.    stimulate activity in the other entity. Some commands may only have a
  591.    meaningful interpretation in one direction, however.  A response
  592.    indicates that the activity started by the command was completed, and
  593.    a code indicates success or failure of the command, and perhaps other
  594.    information related to the command as well.
  595.  
  596.    Associated with each command is a set of parameters.  The order in
  597.    which the parameters appear is significant to the correct operation
  598.    of the protocols.  More information on the syntax of command
  599.    parameters can be found in the syntax descriptions.
  600.  
  601.    The commands are:
  602.  
  603.       - Begin: initiate communication between a process in the Host and
  604.       an off-loaded protocol interpreter in the OPE.  (A Channel level
  605.       stream/connection will typically have been opened as a prior step.
  606.       All other commands, except No-op, apply to a stream on which a
  607.       successful Begin has been done.)
  608.  
  609.       - Transmit: transmit data between a process in the Host and an
  610.       off-loaded protocol interpreter in the OPE.
  611.  
  612.       - Signal:  cause an out-of-band signal to be sent by the
  613.       off-loaded protocol interpreter to its peer, or indicate the
  614.       arrival of such a signal from the remote side.
  615.  
  616.       - Condition: alter the off-loaded protocol interpreter's
  617.       operational characteristics.
  618.  
  619.       - Status: transfer status requests or information between a
  620.       process in the Host and an off-loaded protocol interpreter in the
  621.       OPE.
  622.  
  623.  
  624.  
  625.  
  626. Lilienkamp & Mandell & Padlipsky                               [Page 11]
  627.  
  628.  
  629.  
  630. RFC 929                                                    December 1984
  631. Proposed Host-Front End Protocol
  632.  
  633.  
  634.       - End: indicate that services from the off-loaded protocol
  635.       interpreter are no longer required, or will no longer be provided.
  636.  
  637.       - No-op:  performs no operation, but facilitates testing.
  638.  
  639.    These commands will be discussed in the following sections. Each of
  640.    these sections includes a discussion of the purpose of the command, a
  641.    description of each of the parameters used with the command, a list
  642.    of responses for the command, an example of the command, and a set of
  643.    notes for the implementor.  (An appendix will eventually be furnished
  644.    for each protocol offloading, showing the use of its protocol
  645.    idiosyncratic parameters as well as of the general parameters on a
  646.    per-command basis.  Initially, only representative offloadings will
  647.    be treated in appendices, with others to be added after the protocol
  648.    gains acceptance.)
  649.  
  650.    Begin
  651.  
  652.       Purpose of the Begin Command
  653.  
  654.          The purpose of a Begin command is to initiate communication
  655.          between the Host and the OPE on a particular stream or channel
  656.          (the channel is opened as a separate step, of course). The
  657.          interpretation of the command is somewhat dependent upon
  658.          whether it was issued by the Host of the OPE.
  659.  
  660.          - If the command was issued by the Host, it means some process
  661.          in the Host is requesting services of a protocol that was
  662.          off-loaded to the OPE.  The user request results in the
  663.          establishment of a channel connection between the Host and the
  664.          OPE, and a Begin command to the Command interpreter in the OPE.
  665.  
  666.          - If the command was issued by the OPE, it means some protocol
  667.          interpreter in the OPE has data for some process in the Host
  668.          which is not currently known by the OPE.  An example would be
  669.          an incoming UDP datagram on a new port, or if no Begin for UDP
  670.          had been issued at all by the Host.  (An incoming TCP
  671.          connection request could be handled by a response to the user's
  672.          Passive Open request, which had previously caused a Begin
  673.          request from the Host; an incoming TCP connection request to a
  674.          port on which no Listen had been issued would cause an OPE
  675.          generated Begin, however.)
  676.  
  677.          As indicated earlier, any particular Host is not required to
  678.          support two-way Begins.
  679.  
  680.  
  681.  
  682.  
  683. Lilienkamp & Mandell & Padlipsky                               [Page 12]
  684.  
  685.  
  686.  
  687. RFC 929                                                    December 1984
  688. Proposed Host-Front End Protocol
  689.  
  690.  
  691.       Parameters of the Begin Command
  692.  
  693.          The Begin command has several parameters associated with it.
  694.          These parameters contain information needed by the offloaded
  695.          protocol to provide an adequate level of network service.  This
  696.          information includes protocol, source and destination
  697.          addresses, and also type of service and flow control advice.
  698.          These parameters are discussed in detail below.
  699.  
  700.       Protocol
  701.  
  702.          The protocol parameter identifies that off-loaded protocol in
  703.          the OPE to which Begin is directed, or which issued the Begin
  704.          to the Host.  For example, if the user wished to utilize TCP
  705.          services, and the TCP software was off-loaded into the OPE,
  706.          then the Protocol parameter for the Begin command would be TCP.
  707.  
  708.          There are two categories of protocol parameters -- generic and
  709.          specific.  A generic parameter identifies a type of protocol
  710.          service required, but does not identify the actual protocol.
  711.          Use of generic protocols allows a Host process to obtain
  712.          network services without specific knowledge of what protocol is
  713.          being used; this could be appropriate for use in situations
  714.          where no specific aspect(s) of a specific protocol is/are
  715.          required.  For example, the user may select a generic
  716.          Host-to-Host connection protocol, and (at some point in the
  717.          future) may actually receive services from either TCP or the
  718.          NBS Transport Protocol, depending on the network (or even the
  719.          foreign Host) in question.  A specific protocol parameter
  720.          identifies some particular protocol, e.g., TCP, whose use is
  721.          required for the given channel.
  722.  
  723.          The valid entries for the protocol field include:
  724.  
  725.             Generic   Specific  Comment
  726.  
  727.             GIP       IP        Datagram Internetwork Protocol
  728.             HHP       TCP       Connection Transport/Host-Host Protocol
  729.             GDP       UDP       Datagram Transport/Host-Host Protocol
  730.             VTP       TEL       Virtual Terminal (Telnet) Protocol
  731.             GFP       FTP       File Transfer Protocol
  732.             MAIL      SMTP      Mail Transfer Protocol
  733.             PROX      PROX      Proximate Net Interface Protocol
  734.  
  735.          (Note that the final line is meant to allow for a process in an
  736.          OPE'd Host's getting at the PI of the Network Interface
  737.          Protocol for whatever the proximate network is.  Of course, so
  738.  
  739.  
  740. Lilienkamp & Mandell & Padlipsky                               [Page 13]
  741.  
  742.  
  743.  
  744. RFC 929                                                    December 1984
  745. Proposed Host-Front End Protocol
  746.  
  747.  
  748.          doing only makes sense in specialized contexts.  We conceive of
  749.          the desirability of "pumping bits at a peripheral" on a LAN,
  750.          though, and don't want to preclude it, even if it would be
  751.          impossible on many LAN's to deal with the problem of
  752.          distinguishing traffic coming back on the LAN in this "raw"
  753.          mode from normal, IP traffic.  Indeed, in some contexts it is
  754.          likely that administrative considerations would preclude
  755.          avoidance of IP even if technical considerations allowed it,
  756.          but it's still the case that "the protocol" should provide a
  757.          hook for going directly to the L I protocol in play.)
  758.  
  759.          There is no default value for this parameter.  If it is not
  760.          present, the Begin command is in error.  The control flag for
  761.          this parameter is -pr.
  762.  
  763.       Active/Passive
  764.  
  765.          The Active/Passive parameter indicates whether the issuer of
  766.          the Begin command desires to be the Active or Passive user of
  767.          the protocol.  This parameter is particularly relevant to
  768.          connection-oriented protocols such as TCP, where the user may
  769.          actively pursue connection establishment, or else may passively
  770.          wait for the remote entity to actively establish the
  771.          connection; it also allows some process to establish itself as
  772.          the Host "fielder" of incoming traffic for a connectionless
  773.          protocol such as IP.
  774.  
  775.          Active is requested using the single character "A".  Passive is
  776.          indicated using the character "P".  The default value of this
  777.          parameter is "A". Also, when the OPE issues the Begin command,
  778.          the value must be "A".  The control flag for this parameter is
  779.          -ap.
  780.  
  781.       Foreign Address Primary Component
  782.  
  783.          The addressing structure supported by H-FP is two level. Each
  784.          address has two components, the primary and the secondary.  The
  785.          exact interpretation of these two components is protocol
  786.          specific, but some generalities do apply.  The primary
  787.          component of the address identifies where the protocol is to
  788.          deliver the information. The secondary component identifies
  789.          which recipient at that location is to receive the information.
  790.          For example, the TCP primary address component is the Host's
  791.          Internet Address, while the secondary address component is the
  792.          TCP port.  Similarly, IP's primary address component is the
  793.          Host's Internet Address, and the secondary address component is
  794.          the IP ULP field.  Some protocols provide only a single level
  795.  
  796.  
  797. Lilienkamp & Mandell & Padlipsky                               [Page 14]
  798.  
  799.  
  800.  
  801. RFC 929                                                    December 1984
  802. Proposed Host-Front End Protocol
  803.  
  804.  
  805.          of addressing, or the secondary level can be deduced from some
  806.          other information (e.g., Telnet).  In these cases, only the
  807.          primary component is used.  To cater to such cases, the
  808.          secondary component parameter comes later in the parameter
  809.          list.
  810.  
  811.          The Foreign Address Primary Component parameter contains the
  812.          primary component of the destination address.  It may be in
  813.          either a numeric or symbolic form.  (Note that this allows for
  814.          the OPE to exercise a Name Server type of protocol if
  815.          appropriate, as well as freeing the Host from the necessity of
  816.          maintaining an in-board name to address table.) The default
  817.          value for this parameter, although it only makes sense for
  818.          Passive Begins, is "Any Host".  The control flag for this
  819.          parameter is -fp.
  820.  
  821.       Mediation Level
  822.  
  823.          The mediation level parameter is an indication of the role the
  824.          Host wishes the OPE to play in the operation of the protocol.
  825.          The extreme ranges of this mediation would be the case where
  826.          the Host wished to remain completely uninvolved, and the case
  827.          where the Host wished to make every possible decision.  The
  828.          specific interpretation of this parameter is dependent upon the
  829.          particular off-loaded protocol.
  830.  
  831.          The concept of mediation level can best be clarified by means
  832.          of example.  A full inboard implementation of the Telnet
  833.          protocol places several responsibilities on the Host. These
  834.          responsibilities include negotiation and provision of protocol
  835.          options, translation between local and network character codes
  836.          and formats, and monitoring the well-known socket for incoming
  837.          connection requests.  The mediation level indicates whether
  838.          these responsibilities are assigned to the Host or to the OPE
  839.          when the Telnet implementation is outboard.  If no OPE
  840.          mediation is selected, the Host is involved with all
  841.          negotiation of the Telnet options, and all format conversions.
  842.          With full OPE mediation, all option negotiation and all format
  843.          conversions are performed by the OPE.  An intermediate level of
  844.          mediation might have ordinary option negotiation, format
  845.          conversion, and socket monitoring done in the OPE, while
  846.          options not known to the OPE are handled by the Host.
  847.  
  848.          The parameter is represented with a single ASCII digit.  The
  849.          value 9 represents full OPE mediation, and the value 0
  850.          represents no OPE mediation.  Other values may be defined for
  851.  
  852.  
  853.  
  854. Lilienkamp & Mandell & Padlipsky                               [Page 15]
  855.  
  856.  
  857.  
  858. RFC 929                                                    December 1984
  859. Proposed Host-Front End Protocol
  860.  
  861.  
  862.          some protocols (e.g., the intermediate mediation level
  863.          discussed above for Telnet).  The default value for this
  864.          parameter is 9.  The control flag for this parameter is -m.
  865.  
  866.       Transmit Response Discipline
  867.  
  868.          The Transmit Response Discipline parameter is used to set the
  869.          desired action on the OPE's part for generating responses to
  870.          Transmit commands.  Essentially the parameter determines when
  871.          the OPE's response to the transmit command occurs (i.e.,
  872.          immediately or delayed).
  873.  
  874.          The Transmit Response Discipline value is represented by a
  875.          single ASCII character.  The character "N" is used for
  876.          nonblocking Transmit commands, which implies that responses for
  877.          Transmit commands should be generated as soon as the command
  878.          has been examined for correctness (i.e., that the syntax is
  879.          good and the parameters appear reasonable).  In other words,
  880.          the outboard protocol interpreter has the data in its queue,
  881.          but hasn't necessarily transmitted it to the net.  The
  882.          character "B" is used for blocking Transmit commands, which
  883.          requests that the response not be generated until the protocol
  884.          interpreter has successfully transmitted the data (unless, of
  885.          course, the Transmit command was badly formed). The default
  886.          value for this parameter is "N", or a nonblocking Transmit
  887.          command.  The control flag for this parameter is -tr.
  888.          (Depending on the protocol in play, "successfully transmitted"
  889.          might well imply that an acknowledgment of some sort has been
  890.          received from the foreign Host, but for other protocols it
  891.          might only mean that the given collection of bits has been
  892.          passed from the OPE to the proximate net.)
  893.  
  894.       Foreign Address Secondary Component
  895.  
  896.          The addressing mechanisms supported by this level of H-FP are
  897.          discussed above.  The Foreign Address Secondary Component
  898.          parameter contains the value of the destination address's
  899.          secondary component.  Some protocols do not require this
  900.          parameter, or can obtain it from other information.  Therefore,
  901.          the default value for this parameter is NULL.  A NULL secondary
  902.          component might be an error for some protocols, however.  The
  903.          secondary component can be expressed either numerically or
  904.          symbolically.  The control flag for this parameter is -fs.
  905.          (Note that it is intended to be "legal" to specify a Secondary
  906.          Component other than the Well-Known Socket for the protocol in
  907.          play; in such cases, the result should be that the virtualizing
  908.          of the given protocol be applied to the stream, in the
  909.  
  910.  
  911. Lilienkamp & Mandell & Padlipsky                               [Page 16]
  912.  
  913.  
  914.  
  915. RFC 929                                                    December 1984
  916. Proposed Host-Front End Protocol
  917.  
  918.  
  919.          expectation that that's what the other side is expecting.  This
  920.          is to cater to, for example, a Terminal-Terminal protocol that
  921.          merely "does Telnet" to a socket other than the usual Logger.)
  922.  
  923.       Local Address Secondary Component
  924.  
  925.          The Local Address Secondary Component parameter contains the
  926.          value of the local address's secondary component.  (The primary
  927.          component is assumed to be the default for the Host, but can be
  928.          altered as well; see below.) Some protocols do not require this
  929.          parameter, or can obtain it from other information.  In some
  930.          cases, the OPE may already know the value for this parameter
  931.          and therefore not require it. The default value of this
  932.          parameter is NULL.  The local address secondary component can
  933.          be expressed either numerically or symbolically.  The control
  934.          flag for this parameter is -ls.
  935.  
  936.       Begin Timeout Interval
  937.  
  938.          After a Begin command is issued, a timer can be started.  If
  939.          the activity requested cannot be performed within some timed
  940.          interval, then the Begin command may expire.  An expired Begin
  941.          command returns a response code indicating a Begin timeout
  942.          occurred.  The Begin Timeout Interval parameter contains the
  943.          length of time the timer will run before the Begin timeout
  944.          occurs.
  945.  
  946.          The parameter is represented as a string of ASCII digits
  947.          indicating the time interval in seconds.  The default value of
  948.          this parameter is infinity (i.e., the Begin command will never
  949.          timeout).  The control flag for this parameter is -bt.
  950.  
  951.       Type of Service Advice
  952.  
  953.          The Type of Service Advice parameter contains information on
  954.          the service characteristics the user desires from the offloaded
  955.          protocol.  Included in this parameter is the precedence of the
  956.          data transfer, and also indication of whether high throughput,
  957.          fast response time, or low error rate is the primary goal.
  958.  
  959.          The format of this parameter is a letter immediately (i.e. no
  960.          intervening spaces) followed by a digit.  The letter "T"
  961.          indicates that high throughput is desired.  The letter "R"
  962.          indicates minimal response time is the goal.  The letter "E"
  963.          indicates that low error rates are the goal.  The letter "N"
  964.          indicates there are no special service requirements to be
  965.          conveyed.  The digit immediately following the character
  966.  
  967.  
  968. Lilienkamp & Mandell & Padlipsky                               [Page 17]
  969.  
  970.  
  971.  
  972. RFC 929                                                    December 1984
  973. Proposed Host-Front End Protocol
  974.  
  975.  
  976.          indicates the desired precedence level, with zero being the
  977.          lowest, and nine being the highest.  The specific
  978.          interpretation of this parameter is dependent on what service
  979.          options are provided by the protocol.  The default value of
  980.          this parameter is the lowest precedence (ROUTINE), and no
  981.          special service requests.  The control flag for this parameter
  982.          is -ts.
  983.  
  984.       Flow Control Advice
  985.  
  986.          The Flow Control Advice parameter contains information on the
  987.          flow characteristics desired by the user.  Some applications
  988.          such as file transfer operate more efficiently if the data is
  989.          transferred in large pieces, while other, more interactive
  990.          applications are more efficiently served if smaller pieces are
  991.          used.  This parameter then indicates whether large or small
  992.          data blocks should be used.  It is only relevant in stream or
  993.          connection-oriented protocols, where the user sends more than a
  994.          single piece of data.
  995.  
  996.          This parameter is represented by a single ASCII digit. A value
  997.          0 means the data should be sent in relatively small blocks
  998.          (e.g., character or line oriented applications), while a value
  999.          9 means the data should be sent in relatively large blocks
  1000.          (e.g., block or file oriented applications). Other values
  1001.          represent sizes between those extremes.  The character "N"
  1002.          indicates that no special flow control advice is provided.  The
  1003.          actual interpretation of this parameter is dependent on the
  1004.          particular protocol in the OPE.  The default value of this
  1005.          parameter is no flow control advice. In this case, the protocol
  1006.          in the OPE will operate based only on information available in
  1007.          the OPE.  The control flag for this parameter is -fc.
  1008.  
  1009.       Local Address Primary Component
  1010.  
  1011.          This parameter contains the local address primary component. It
  1012.          is anticipated that under most circumstances, this component is
  1013.          known to both the Host and the OPE.  Consequently, this
  1014.          parameter is seldom required.  It would be useful if the Host
  1015.          desired to select one of several valid addresses, however.  The
  1016.          control flag for this parameter is -lp.
  1017.  
  1018.       Security
  1019.  
  1020.          The security parameters contain a set of security level,
  1021.          compartment, community of interest, and handling restriction
  1022.          information.  Currently, security is provided by performing all
  1023.  
  1024.  
  1025. Lilienkamp & Mandell & Padlipsky                               [Page 18]
  1026.  
  1027.  
  1028.  
  1029. RFC 929                                                    December 1984
  1030. Proposed Host-Front End Protocol
  1031.  
  1032.  
  1033.          processing at system high level or at a single level.
  1034.          Consequently, these parameters are probably redundant, since
  1035.          the security information is known.  In the future, however,
  1036.          these parameters may be required.  Therefore a field is
  1037.          provided. The control flag for this parameter is -s.
  1038.  
  1039.       Protcol Idiosyncratic Parameters
  1040.  
  1041.          The remaining parameters are protocol idiosyncratic.  That is,
  1042.          each protocol that is off-loaded may have a set of these
  1043.          parameters, which are documented with a description of the
  1044.          off-loaded protocol.  The default value for these parameters is
  1045.          NULL, unless otherwise specified by a particular offloaded
  1046.          protocol.  The control flag for this set of parameters is -pi,
  1047.          which identifies the first protocol idiosyncratic parameters.
  1048.          Control flags for other protocol idiosyncratic parameters must
  1049.          be defined for each off-loaded protocol.
  1050.  
  1051.       Data
  1052.  
  1053.          After the Protocol Idiosyncratic Parameters, if any, and the
  1054.          required <nl>, if the protocol in play allows for it at this
  1055.          juncture the rest of the chunk will be interpreted as data to
  1056.          be transmitted.  That is, in connection oriented protocols data
  1057.          may or may not be permitted at connection initiation time, but
  1058.          in connectionless protocols it certainly makes sense to allow
  1059.          the H-FP Begin command to convey data. (This will also be
  1060.          useful when we get to the Condition command.)
  1061.  
  1062.       Responses
  1063.  
  1064.          The following responses have been identified for the Begin
  1065.          command:
  1066.  
  1067.             000    Command completed successfully
  1068.             101    Throughput not available; using maximum
  1069.             102    Reliability not available; using maximum
  1070.             103    Delay not available; using minimum
  1071.             110    Flow Control advice not followed; smaller blocks used
  1072.             111    Flow Control advice not followed; larger blocks used
  1073.             201    Failed; Begin not implemented in this direction
  1074.             202    Failed; timeout
  1075.             203    Failed; Begin command on already active channel
  1076.             300    Problem with multiple chunks
  1077.             301    Syntax problem with Begin command
  1078.             302    Protocol not supported in OPE/Host
  1079.             303    Active service not available
  1080.  
  1081.  
  1082. Lilienkamp & Mandell & Padlipsky                               [Page 19]
  1083.  
  1084.  
  1085.  
  1086. RFC 929                                                    December 1984
  1087. Proposed Host-Front End Protocol
  1088.  
  1089.  
  1090.             304    Passive service not available
  1091.             305    Invalid Foreign Address Primary Component
  1092.             306    Invalid Transmit Discipline
  1093.             307    Invalid Foreign Address Secondary Component
  1094.             308    Invalid Local Address Secondary Component
  1095.             309    Invalid Timeout Interval
  1096.             310    Invalid Type of Service Advice
  1097.             311    Invalid Flow control Advice
  1098.             312    Invalid Local Address Primary Component
  1099.             401    Protocol Interpreter in OPE not responding
  1100.             402    Remote Protocol Interpreter not available
  1101.             403    Failed; insufficient protocol interpreter resources
  1102.             501    Failed; insufficient OPE resources
  1103.             601    Request violates security policy
  1104.             602    Security parameter problem
  1105.  
  1106.          Additionally, protocol idiosyncratic responses will be defined
  1107.          for each off-loaded protocol.
  1108.  
  1109.       Example of Begin Command
  1110.  
  1111.          The Begin command is the most complex of the H-FP Command
  1112.          Level. When the off-loaded protocol is TCP, the Begin command
  1113.          is used to open TCP connections.  One possible example of a
  1114.          Begin command issued by an inboard Telnet interpreter to open a
  1115.          TCP connection to ISIA, with no begin timeout interval, is:
  1116.  
  1117.             C BE TCP A ISIA 9 N 23 ,, ,, N0 S <nl>
  1118.  
  1119.          Where:
  1120.  
  1121.             TCP    The code for the protocol TCP
  1122.             A      Indicates Active Begin
  1123.             ISIA   The name of a Host at USC-ISI
  1124.             9      Mediation Level 9:  Full OPE mediation
  1125.             N      Non-blocking transmit
  1126.             23     Destination Telnet Port
  1127.             ,,     skip  over parameters  (Local Address Secondary,
  1128.                    Begin Timeout Interval)
  1129.             N0     Type of Service Advice:  No special Advice,
  1130.                    Normal Precedence
  1131.             S      Flow Control Advice: use small blocks
  1132.  
  1133.          This command will cause the OPE to invoke the TCP interpreter
  1134.          to generate the initial SYN packet to the well-known Telnet
  1135.          socket on Host ISIA.  It also informs the OPE to do all TCP
  1136.          related processing via the Mediation Level, accepts default
  1137.  
  1138.  
  1139. Lilienkamp & Mandell & Padlipsky                               [Page 20]
  1140.  
  1141.  
  1142.  
  1143. RFC 929                                                    December 1984
  1144. Proposed Host-Front End Protocol
  1145.  
  1146.  
  1147.          Local Address parameters, and sets the Begin Timeout Interval
  1148.          to infinity.  The precedence of the TCP connection is Normal,
  1149.          and the TCP interpreter is informed that the data stream will
  1150.          consist of primarily small blocks.
  1151.  
  1152.       Notes to the Implementor
  1153.  
  1154.          Response 203 might seem silly to some readers, but it's there
  1155.          in case somebody goofed in using the Channel Layer.
  1156.  
  1157.    Transmit
  1158.  
  1159.       Purpose of the Transmit Command
  1160.  
  1161.          The purpose of the Transmit command is to permit the process in
  1162.          the Host to send data using an off-loaded protocol interpreter
  1163.          in the OPE, and also to permit the OPE to deliver data received
  1164.          from the network destined for the process in the Host.  The
  1165.          Transmit command is particularly relevant to connection and
  1166.          stream type protocols, although it has applications for
  1167.          connectionless protocols as well.  After the Begin command is
  1168.          issued successfully and the proper Response received, Transmit
  1169.          commands can be issued on the given channel.  The semantics of
  1170.          the Transmit command depend on whether it was issued by the
  1171.          Host or the OPE.
  1172.  
  1173.          - If the Host issues the Transmit command, a process in the
  1174.          Host wishes to send the data to the destination specified to
  1175.          the off-loaded protocol interpreter that was established
  1176.          (typically) by a previous Begin command on the given H-FP
  1177.          channel.
  1178.  
  1179.          - If the OPE issues the command, the OPE has received data
  1180.          destined for a process in the Host from a connection or stream
  1181.          supported by the off-loaded protocol that was established by a
  1182.          previous Begin command on the given H-FP channel.
  1183.  
  1184.       Parameters of the Transmit Command
  1185.  
  1186.          The Transmit command has one parameter associated with it. It
  1187.          is an optional parameter, to temporarily override the response
  1188.          discipline for this particular transmit command. Some protocols
  1189.          may have protocol-idiosyncratic parameters as well.  The
  1190.          transmit command also has data associated with it.  All
  1191.          parameters must precede the data to be transmitted.
  1192.  
  1193.  
  1194.  
  1195.  
  1196. Lilienkamp & Mandell & Padlipsky                               [Page 21]
  1197.  
  1198.  
  1199.  
  1200. RFC 929                                                    December 1984
  1201. Proposed Host-Front End Protocol
  1202.  
  1203.  
  1204.       Response Discipline Override
  1205.  
  1206.          The Response Discipline Override parameter indicates the
  1207.          desired response discipline for that individual Transmit
  1208.          Command, overriding the default response discipline.  A single
  1209.          ASCII character is used to indicate the desired discipline.
  1210.          The character "N" indicates that this Transmit command should
  1211.          not block, and should return a response as soon as the data is
  1212.          given to the protocol interpreter in the OPE. The character "B"
  1213.          indicates that this Transmit command should block, meaning that
  1214.          a response should not be generated until the data has been sent
  1215.          to the destination.  The default value of this parameter is the
  1216.          currently defined Transmit Command response discipline.  The
  1217.          use of this parameter does not alter the currently defined
  1218.          Transmit command response discipline; the default is changed
  1219.          with the Condition command.  The control flag for this
  1220.          parameter is -rd.
  1221.  
  1222.       Protocol-Idiosyncratic Parameters
  1223.  
  1224.          Any other parameters to the Transmit command are
  1225.          protocol-idiosyncratic. That is, each protocol that is
  1226.          off-loaded has a set of these parameters, which are documented
  1227.          with a description of the off-loaded protocol.  The default
  1228.          value for these parameters is NULL, unless otherwise specified
  1229.          by a particular off-loaded protocol.  The control flag for this
  1230.          set of parameters is -pi, which identifies the first
  1231.          protocol-idiosyncratic parameters.  Control flags for other
  1232.          protocol-idiosyncratic parameters must be defined for each
  1233.          off-loaded protocol.
  1234.  
  1235.       Responses
  1236.  
  1237.          The following responses for the Transmit command have been
  1238.          identified:
  1239.  
  1240.             000    Transmit Command completed successfully
  1241.             201    Transmit Command not appropriate
  1242.             300    Problem with multiple chunks
  1243.             301    Syntax problem with Transmit Command
  1244.             302    Invalid Transmit Command Response Discipline
  1245.             401    Protocol Interpreter in OPE not responding
  1246.             402    Failure in remote protocol interpreter
  1247.             403    Failed; insufficient protocol interpreter resources
  1248.             501    Failed; insufficient OPE resources
  1249.             601    Request violates security policy
  1250.  
  1251.  
  1252.  
  1253. Lilienkamp & Mandell & Padlipsky                               [Page 22]
  1254.  
  1255.  
  1256.  
  1257. RFC 929                                                    December 1984
  1258. Proposed Host-Front End Protocol
  1259.  
  1260.  
  1261.          Additionally, protocol-idiosyncratic responses will be defined
  1262.          for each off-loaded protocol.
  1263.  
  1264.       Example of Transmit Command
  1265.  
  1266.          The transmit command is used in TCP to provide the TCP write
  1267.          call.  An example of such a transmit command would be:
  1268.  
  1269.             C TR N <nl> <DATA>
  1270.  
  1271.          Where N indicates non-blocking transmission discipline, <nl> is
  1272.          the required command-ending newline, and <DATA> is presumed to
  1273.          be the user's data that is to be transmitted.
  1274.  
  1275.       Notes to the Implementor
  1276.  
  1277.          If you get a 403 or a 501 response and have sent a multiple
  1278.          chunk it probably makes sense to try a single chunk; if you've
  1279.          sent a single chunk, it makes sense to wait a while and try
  1280.          again a few times before giving up on the stream/channel.
  1281.  
  1282.    Condition
  1283.  
  1284.       Purpose of the Condition Command
  1285.  
  1286.          The primary purpose of the Condition command is to permit a
  1287.          process to alter the characteristics that were originally set
  1288.          up with the Begin command. (That is, "condition" is a verb.)
  1289.          These characteristics include the addresses, the mediation
  1290.          level, the type of service, and the flow control parameters
  1291.          from Begin. They may also include protocol-idiosyncratic
  1292.          characteristics. (Although Condition is usually thought of as a
  1293.          Host->OPE command, it may also be used OPE->Host in some
  1294.          contexts.)
  1295.  
  1296.          Condition is a generic command that may find little use in some
  1297.          off-loaded protocols.  In others, only some of the parameters
  1298.          identified may make sense.  For example, changing the
  1299.          destination address of a TCP connection involves closing one
  1300.          connection and opening another.  Consequently, in may make more
  1301.          sense to first issue an End command, and then a Begin with the
  1302.          new address.  In other protocols, such as IP or UDP, changing
  1303.          the address on each datagram would be a perfectly reasonable
  1304.          thing to do.
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310. Lilienkamp & Mandell & Padlipsky                               [Page 23]
  1311.  
  1312.  
  1313.  
  1314. RFC 929                                                    December 1984
  1315. Proposed Host-Front End Protocol
  1316.  
  1317.  
  1318.       Parameters of the Condition Command
  1319.  
  1320.          The Condition command has the same parameters as the Begin
  1321.          command.  Any parameters expressed in a Condition command
  1322.          indicate the new values of the characteristics to be altered;
  1323.          all parameters not expressed retain the current value.
  1324.  
  1325.          Although it is possible to express the change of any of the
  1326.          characteristics originally set up in the Begin command using
  1327.          the Condition command, there are some characteristics that do
  1328.          not make sense to alter, at least for some protocols. For
  1329.          example, once a connection is opened, it does not make much
  1330.          sense to change the Foreign Address Primary or Secondary
  1331.          Components.  Doing so is inconsistent with current versions of
  1332.          TCP, and would require the closing of the existing connection
  1333.          and opening a new one to another address.  Earlier versions of
  1334.          TCP did permit connections to be moved.  If a protocol that
  1335.          provided such a feature was implemented in the OPE, the
  1336.          changing the Secondary Address Components would be a reasonable
  1337.          thing to do.
  1338.  
  1339.       Responses
  1340.  
  1341.          The responses to the Condition command are the same as those to
  1342.          the Begin command.
  1343.  
  1344.       Example of Condition Command
  1345.  
  1346.          The Condition Command can be quite complex, and can be used for
  1347.          many purposes.  One conceived use of the condition command
  1348.          would be to change the type of service advice associated with
  1349.          the channel. An example of this (which also demonstrates the
  1350.          ability to skip parameters) is:
  1351.  
  1352.             C -ts T <nl>
  1353.  
  1354.          which causes the offloaded PI associated with the current
  1355.          channel to attempt to achieve high throughput (in its use of
  1356.          the comm subnet(s) in play).
  1357.  
  1358.       Notes to the Implementor
  1359.  
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365.  
  1366.  
  1367. Lilienkamp & Mandell & Padlipsky                               [Page 24]
  1368.  
  1369.  
  1370.  
  1371. RFC 929                                                    December 1984
  1372. Proposed Host-Front End Protocol
  1373.  
  1374.  
  1375.    Signal
  1376.  
  1377.       Purpose of Signal Command
  1378.  
  1379.          The purpose of the Signal Command (implicitly at least) is to
  1380.          permit the transfer of out-of-band signals or information
  1381.          between the Host and the OPE, in order to utilize (explicitly)
  1382.          out-of-band signaling services of the off-loaded protocol. The
  1383.          semantics of the Signal command depend upon whether it was
  1384.          issued by the Host or the OPE.
  1385.  
  1386.          - If the Signal command was issued by the Host, it means a
  1387.          process in the Host desires to send out-of-band data or an
  1388.          out-of-band signal.
  1389.  
  1390.          - If the Signal command was issued by the OPE, it means
  1391.          out-of-band data or an out-of-band signal arrived for the
  1392.          process associated with the channel in the Host.
  1393.  
  1394.       Parameters of the Signal Command
  1395.  
  1396.          The basic usage of the Signal command is with no parameters,
  1397.          which sends or reports the receipt of an out-of-band signal.
  1398.          Some protocols, such as the NBS Transport Protocol, permit the
  1399.          user to send data with the out-of-band signal.  Hence, data is
  1400.          permitted to accompany the Signal command.  There may also be
  1401.          protocol-idiosyncratic parameters for the Signal command.  If
  1402.          this is the case, these parameters would come before the data.
  1403.  
  1404.       Protocol-Idiosyncratic Parameters
  1405.  
  1406.          The parameters for the Signal command are protocol
  1407.          idiosyncratic.  That is, each protocol off-loaded has a set of
  1408.          these parameters.  The default value for these parameters is
  1409.          their previous values. Control flags for multiple
  1410.          protocol-idiosyncratic parameters must be defined for each
  1411.          off-loaded protocol.
  1412.  
  1413.       Responses
  1414.  
  1415.          The following responses have been identified for the Signal
  1416.          command:
  1417.  
  1418.             000    Command completed successfully
  1419.             201    Command not appropriate
  1420.             300    Problem with multiple chunks
  1421.             301    Syntax problem with Command
  1422.  
  1423.  
  1424. Lilienkamp & Mandell & Padlipsky                               [Page 25]
  1425.  
  1426.  
  1427.  
  1428. RFC 929                                                    December 1984
  1429. Proposed Host-Front End Protocol
  1430.  
  1431.  
  1432.             401    Protocol Interpreter in OPE not responding
  1433.             402    Failure in remote protocol interpreter
  1434.             403    Failed; insufficient protocol interpreter resources
  1435.             501    Failed; insufficient OPE resources
  1436.             601    Request violates security policy
  1437.  
  1438.          Additionally, protocol-idiosyncratic responses will be defined
  1439.          for each off-loaded protocol.
  1440.  
  1441.       Example of Signal Command
  1442.  
  1443.          The major perceived use for the Signal command when offloading
  1444.          a connection protocol is sending an out-of-band signal with no
  1445.          data.  In such a case, the appropriate signal command would be:
  1446.  
  1447.             C SI <nl>
  1448.  
  1449.       Notes to the Implementor
  1450.  
  1451.          Some protocols may allow only only one outstanding signal at a
  1452.          time.  For these protocols, it is an implementation issue
  1453.          whether the OPE will buffer several signals, but a good case
  1454.          could be made for the position that a scrupulous OPE would
  1455.          reflect a 202 response back to the Host in such cases.
  1456.  
  1457.          There is some question as to the proper handling of the
  1458.          "expedited data" notion of some (particularly ISO) protocols.
  1459.          It might be more appropriate to deal with such a thing as a
  1460.          protocol idiosyncratic parameter on the Transmit command
  1461.          instead of using the Signal command (even if it's the closest
  1462.          approximation to an out-of-band signal in the given protocol).
  1463.          If it's provided using the Signal command, the expedited data
  1464.          should not be passed as ASCII, and should appear after the
  1465.          command-terminating newline character (and appropriate padding
  1466.          with space characters).
  1467.  
  1468.    Status
  1469.  
  1470.       Purpose of Status Command
  1471.  
  1472.          The purpose of the Status command is to permit the Host to
  1473.          request and obtain status information from the OPE, and vice
  1474.          versa. This includes status request of a conventional protocol
  1475.          interface (e.g., in TCP, there is a request to determine the
  1476.          state of a particular connection).
  1477.  
  1478.  
  1479.  
  1480.  
  1481. Lilienkamp & Mandell & Padlipsky                               [Page 26]
  1482.  
  1483.  
  1484.  
  1485. RFC 929                                                    December 1984
  1486. Proposed Host-Front End Protocol
  1487.  
  1488.  
  1489.       Parameters of the Status Command
  1490.  
  1491.          The parameters for the Status command indicate whether it is a
  1492.          request or a response, and contain the status information.
  1493.  
  1494.          Request/Report
  1495.  
  1496.             This parameter indicates whether the command is a Status
  1497.             request or a Status report.  It consists of a single ASCII
  1498.             character.  Q indicates a request (query), and R indicates a
  1499.             report.  It should be noted that a report may be generated
  1500.             as the result of a query, or may be generated as the result
  1501.             of specific protocol mechanisms.
  1502.  
  1503.       Protocol-Idiosyncratic Parameters
  1504.  
  1505.          The parameters to the status command are
  1506.          protocol-idiosyncratic. That is, each protocol off-loaded has a
  1507.          set of these parameters.  The default value for these
  1508.          parameters is their previous values.  Among these parameters is
  1509.          an identifier of the type of status information contained or
  1510.          requested, and a value or set of values that contain the
  1511.          particular status information. The status information itself
  1512.          should be the last item in the command. The control flag for
  1513.          this set of parameters is -pi, which identifies the first
  1514.          protocol-idiosyncratic parameters.  Control flags for other
  1515.          protocol-idiosyncratic parameters must be defined for each
  1516.          off-loaded protocol.
  1517.  
  1518.       Responses
  1519.  
  1520.          The following responses have been identified for the Status
  1521.          command:
  1522.  
  1523.             000    Command completed successfully
  1524.             201    Command not appropriate
  1525.             300    Problem with multiple chunks
  1526.             301    Syntax problem with Command
  1527.             302    Inappropriate status request
  1528.             303    Inappropriate status response
  1529.             401    Protocol Interpreter in OPE not responding
  1530.             402    Failure in remote protocol interpreter
  1531.             403    Failed; insufficient protocol interpreter resources
  1532.             501    Failed; insufficient OPE resources
  1533.             601    Request violates security policy
  1534.             9xx    Protocol Idiosyncratic status responses
  1535.  
  1536.  
  1537.  
  1538. Lilienkamp & Mandell & Padlipsky                               [Page 27]
  1539.  
  1540.  
  1541.  
  1542. RFC 929                                                    December 1984
  1543. Proposed Host-Front End Protocol
  1544.  
  1545.  
  1546.       Example of Status Command
  1547.  
  1548.          The status command can be particularly complex, depending on
  1549.          the protocol and particular type of status information.  One
  1550.          possible use of the status command when off-loading TCP is to
  1551.          communicate the status service request.  For performing this
  1552.          operation the status command would be:
  1553.  
  1554.             C ST Q <nl>
  1555.  
  1556.       Notes to the Implementor
  1557.  
  1558.    End
  1559.  
  1560.       Purpose of the End Command
  1561.  
  1562.          The purpose of the End command is to communicate that services
  1563.          of the off-loaded protocol are not required.  The semantics of
  1564.          the End command depends upon whether it was issued by the Host
  1565.          or the OPE.
  1566.  
  1567.          - If the Host issues the End command, it means the process in
  1568.          the Host no longer requires the services of the offloaded
  1569.          protocol.
  1570.  
  1571.          - If the OPE issues the End command, it means the remote entity
  1572.          has no more data to send (e.g., the off-loaded protocol is TCP
  1573.          and the remote user has issued a TCP close).
  1574.  
  1575.       Parameters of the End Command
  1576.  
  1577.          One parameter is associated with the End Command.  It indicates
  1578.          whether the termination should be "graceful" or "abrupt" (see
  1579.          below).
  1580.  
  1581.          Graceful/Abrupt
  1582.  
  1583.             The Graceful/Abrupt parameter indicates whether the End
  1584.             should be handled gracefully or abruptly.  If it is handled
  1585.             gracefully, then data in transit is allowed to reach its
  1586.             destination before service is actually terminated.  An
  1587.             abrupt End occurs immediately; all data transmitted from the
  1588.             Host but still pending in the OPE is discarded, and no new
  1589.             incoming data is sent to the Host from the OPE.
  1590.  
  1591.  
  1592.  
  1593.  
  1594.  
  1595. Lilienkamp & Mandell & Padlipsky                               [Page 28]
  1596.  
  1597.  
  1598.  
  1599. RFC 929                                                    December 1984
  1600. Proposed Host-Front End Protocol
  1601.  
  1602.  
  1603.             The parameter is indicated by a single ASCII character.  The
  1604.             character "G" denotes graceful, and "A" denotes abrupt.  The
  1605.             default value for this parameter is graceful.
  1606.  
  1607.       Responses
  1608.  
  1609.          The following responses have been identified for the End
  1610.          command:
  1611.  
  1612.             000    Command completed successfully
  1613.             201    Command not appropriate
  1614.             300    Problem with multiple chunks
  1615.             301    Syntax problem with Command
  1616.             302    Illegal Type of End Command
  1617.             401    Protocol Interpreter in OPE not responding
  1618.             402    Failure in remote protocol interpreter
  1619.             403    Failed; insufficient protocol interpreter resources
  1620.             501    Failed; insufficient OPE resources
  1621.             601    Request violates security policy
  1622.  
  1623.          Additionally, protocol idiosyncratic responses will be defined
  1624.          for each off-loaded protocol.
  1625.  
  1626.       Example of End Command
  1627.  
  1628.          The syntax of the End command is relatively straightforward. It
  1629.          consists of a chunk that contains only a chunk usage
  1630.          identifier, the end command string, and the parameter
  1631.          indicating whether the end should be graceful or abrupt.  A
  1632.          possible valid (abrupt) End command would be:
  1633.  
  1634.             C EN A <nl>
  1635.  
  1636.       Notes to the Implementor
  1637.  
  1638.          Once an End has been issued in a given direction any other
  1639.          commands on the channel in the same direction are in error and
  1640.          should be responded to appropriately.
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652. Lilienkamp & Mandell & Padlipsky                               [Page 29]
  1653.  
  1654.  
  1655.  
  1656. RFC 929                                                    December 1984
  1657. Proposed Host-Front End Protocol
  1658.  
  1659.  
  1660.    No-op
  1661.  
  1662.       Purpose of the No-op Command
  1663.  
  1664.          The No-op command performs no operation.  Its purpose is to
  1665.          permit the Host and OPE to participate in a dialog which does
  1666.          not alter the state of communication activities, both for
  1667.          debugging purposes and to support features of certain protocols
  1668.          (e.g., Telnet's Are You There command).
  1669.  
  1670.       Parameters of the No-op Command
  1671.  
  1672.          There are no parameters associated with the No-op command.
  1673.  
  1674.       Responses
  1675.  
  1676.          There are only two possible legal responses to the No-op
  1677.          command.  They are:
  1678.  
  1679.             000    No-op Command Completed Correctly
  1680.             300    Problem with multiple chunks
  1681.  
  1682.       Example of No-op Command
  1683.  
  1684.          Syntactically the No-op command is quite simple.  It consists
  1685.          of a chunk that contains only the chunk usage identifier and
  1686.          the string for the command, and the newline.  One possible
  1687.          valid No-op command is:
  1688.  
  1689.             C NO <nl>
  1690.  
  1691.       Notes to the Implementor
  1692.  
  1693.          No-ops are included for use in testing and initial
  1694.          synchronization.  (The latter use is not mandatory, however.
  1695.          That is, no exchange of No-ops is required at start-up time,
  1696.          but it is conceivable that some implementations might want to
  1697.          do it just for exercise.) They are also traditional.
  1698.  
  1699.  
  1700.  
  1701.  
  1702.  
  1703.  
  1704.  
  1705.  
  1706.  
  1707.  
  1708.  
  1709. Lilienkamp & Mandell & Padlipsky                               [Page 30]
  1710.  
  1711.  
  1712.  
  1713. RFC 929                                                    December 1984
  1714. Proposed Host-Front End Protocol
  1715.  
  1716.  
  1717. References
  1718.  
  1719.    (References [1]-[3] will be available in M. A. Padlipsky's "The
  1720.    Elements of Networking Style", Prentice Hall, 1985.)
  1721.  
  1722.    [1] Padlipsky, M. A., "The Host-Front End Protocol Approach",
  1723.    MTR-3996, Vol. III, MITRE Corp., 1980.
  1724.  
  1725.    [2] Padlipsky, M. A., "The Elements of Networking Style", M81-41,
  1726.    MITRE Corp., 1981.
  1727.  
  1728.    [3] Padlipsky, M. A., "A Perspective on the ARPANET Reference Model",
  1729.    M82-47, MITRE Corp., 1982.
  1730.  
  1731.    [4] Bailey, G., "Network Access Protocol", S-216,718, National
  1732.    Security Agency Central Security Service, 1982.
  1733.  
  1734.    [5] Day, J. D., G. R. Grossman, and R. H. Howe, "WWMCCS Host to Front
  1735.    End Protocol", 78012.C-INFE.14, Digital Technology Incorporated,
  1736.    1979.
  1737.  
  1738.  
  1739.  
  1740.  
  1741.  
  1742.  
  1743.  
  1744.  
  1745.  
  1746.  
  1747.  
  1748.  
  1749.  
  1750.  
  1751.  
  1752.  
  1753.  
  1754.  
  1755.  
  1756.  
  1757.  
  1758.  
  1759.  
  1760.  
  1761.  
  1762.  
  1763.  
  1764.  
  1765.  
  1766. Lilienkamp & Mandell & Padlipsky                               [Page 31]
  1767.  
  1768.  
  1769.  
  1770. RFC 929                                                    December 1984
  1771. Proposed Host-Front End Protocol
  1772.  
  1773.  
  1774. APPENDIX
  1775.  
  1776.    Per-Protocol Offloading Descriptions
  1777.  
  1778.    1.  Command Level Interface to an Off-loaded TCP
  1779.  
  1780.       This appendix discusses the use of the commands described in the
  1781.       body of this document to provide an interface between a Host
  1782.       process and an off-loaded interpreter of the DoD's Transmission
  1783.       Control Protocol (TCP).  The interface described here is
  1784.       functionally equivalent to the interface found in the MIL-STD 1778
  1785.       specification of TCP.  It is not, however, identical, in that some
  1786.       features of the interface are particularly relevant only in an
  1787.       inboard implementation.
  1788.  
  1789.       The first section describes the mapping between the interface
  1790.       events of MIL-STD 1778 and the commands and responses of this
  1791.       H-FP, and highlights the unique features of the interface.  The
  1792.       next sections discuss the details of each command.  These details
  1793.       include the specialized usages of the command and the
  1794.       protocol-idiosyncratic parameters for that command.
  1795.  
  1796.       1.1.  Relation to MIL-STD 1778 Interface
  1797.  
  1798.          Most of the requests and responses of the TCP interface
  1799.          specified in MIL-STD 1778 are mapped directly to H-FP Commands
  1800.          and responses.  The exceptions are noted in the following
  1801.          descriptions.
  1802.  
  1803.          1.1.1. Requests
  1804.  
  1805.             Unspecified Passive Open, Fully Specified Passive Open,
  1806.             Active Open, and Active Open with Data requests are all
  1807.             implemented using variations of the Begin command.  The
  1808.             distinction between Passive and Active Open is made using
  1809.             the Active/Passive parameter of Begin.  The distinction
  1810.             between unspecified and fully specified lies in the presence
  1811.             or absence of the destination address fields.  An active
  1812.             open with data is identical to a normal active open, except
  1813.             for the presence of data following the command.
  1814.  
  1815.             The Send Service Request is implemented using the Transmit
  1816.             command.  Special protocol idiosyncratic parameters are
  1817.             provided for Urgent, Push, and changing the ULP timeout
  1818.             action and values.  The response to the Transmit command
  1819.             indicates that the appropriate Send call has been made.
  1820.  
  1821.  
  1822.  
  1823. Lilienkamp & Mandell & Padlipsky                               [Page 32]
  1824.  
  1825.  
  1826.  
  1827. RFC 929                                                    December 1984
  1828. Proposed Host-Front End Protocol
  1829.  
  1830.  
  1831.             There is no corresponding response in the specified TCP
  1832.             interface; its only significance is that the Host can issue
  1833.             another Transmit command.
  1834.  
  1835.             The Allocate event is a specification feature of MIL-STD
  1836.             1778 to indicate the willingness of the user to accept
  1837.             incoming data across the interface.  However, because this
  1838.             is precisely the type of flow control provided by the
  1839.             Channel level, the Allocate event would be a superfluous
  1840.             mechanism.  Thus, there is no direct analogy to that event
  1841.             in the H-FP interface. A Host process indicates its
  1842.             willingness to accept new data by informing the channel via
  1843.             its flow control interface (if it has an explicit one).
  1844.  
  1845.             Close and Abort are provided by the End command.  Close uses
  1846.             the graceful version of the End command, while Abort uses
  1847.             the abrupt version.  The response indicates that the End
  1848.             command has been received and the corresponding Close or
  1849.             Abort was issued.  There is no corresponding response in the
  1850.             specified TCP interface.
  1851.  
  1852.             Status is provided by using the query form of the Status
  1853.             command.  The response to the Status command contains the
  1854.             information (see below).
  1855.  
  1856.          1.1.2. Responses
  1857.  
  1858.             The Open Id response is provided so that the user has a
  1859.             shorthand name by which to refer to the connection.  With an
  1860.             outboarded TCP interpreter, there is a one-to-one mapping
  1861.             between TCP connections and H-FP channels.  Hence, the Open
  1862.             Id event is not needed, since the channel ID is sufficient
  1863.             to indicate the desired connection.
  1864.  
  1865.             The Open Failure and Open Success responses are provided
  1866.             using OPE-generated responses to Begin commands (which
  1867.             provide the Active and Passive Service response primitives)
  1868.             issued by the Host.  The value of the response code
  1869.             indicates whether the Begin command succeeded or failed, and
  1870.             can be mapped to the appropriate Open Failure or Open
  1871.             Success indication by the Host.
  1872.  
  1873.             Deliver is provided by having the OPE issue a Transmit
  1874.             command.  As mentioned above, the "flow control" between the
  1875.             TCP interpreter and the Host is provided by the Channel
  1876.             layer, so no explicit interface events are needed.  The
  1877.  
  1878.  
  1879.  
  1880. Lilienkamp & Mandell & Padlipsky                               [Page 33]
  1881.  
  1882.  
  1883.  
  1884. RFC 929                                                    December 1984
  1885. Proposed Host-Front End Protocol
  1886.  
  1887.  
  1888.             response to the Transmit command indicates the data was
  1889.             received by the Host process.  There is no corresponding
  1890.             response in the specified TCP interface.
  1891.  
  1892.             The Closing and Terminate service responses are provided
  1893.             using the End command. Closing is indicated using the
  1894.             graceful version of the command, while terminate is provided
  1895.             using the abrupt version.  The response indicates the End
  1896.             command was received by the Host process.  There is no
  1897.             corresponding response in the specified TCP interface.
  1898.  
  1899.             Status Response is provided by a response to the query
  1900.             version of the Status command.  The status information is
  1901.             communicated via protocol-idiosyncratic parameters following
  1902.             the Response code.
  1903.  
  1904.             Error messages are reported using the spontaneously
  1905.             generated version of the Status command issued by the OPE.
  1906.             The error message is provided in a parameter.  The response
  1907.             indicates the error message was received by the Host
  1908.             process.  There is no corresponding event in the specified
  1909.             TCP interface.
  1910.  
  1911.       1.2.  The Begin Command
  1912.  
  1913.          The Begin command is used in TCP in three major ways:
  1914.  
  1915.             1. To inform the OPE that a process in the Host wishes to
  1916.             open a connection to a particular port on a internet
  1917.             address.
  1918.  
  1919.             2. To inform the OPE that a process in the Host wishes to be
  1920.             informed when a connection attempt is made to any or to a
  1921.             specific port at this Host's internet address.
  1922.  
  1923.             3. To inform the Host that a connection attempt to the OPE
  1924.             has arrived, and there was no Begin of the second type
  1925.             (passive open) issued by the Host relevant to that
  1926.             particular port.
  1927.  
  1928.          1.2.1. Specialized Usage
  1929.  
  1930.             There are four major aspects to the specialized usage of the
  1931.             Begin command and its parameters.  These parameters are:
  1932.  
  1933.                1. The meaning of the Mediation Level parameter
  1934.  
  1935.  
  1936.  
  1937. Lilienkamp & Mandell & Padlipsky                               [Page 34]
  1938.  
  1939.  
  1940.  
  1941. RFC 929                                                    December 1984
  1942. Proposed Host-Front End Protocol
  1943.  
  1944.  
  1945.                2. The selection of blocking treatment of Transmit
  1946.                   command
  1947.  
  1948.                3. The meaning of the address components
  1949.  
  1950.                4. The selection of the TCP Active Open with Data
  1951.                   primitive.
  1952.  
  1953.             The Mediation Level parameter has only two possible values
  1954.             when offloading TCP.  These are "9" and "0".  The normal
  1955.             usage of an off-loaded TCP uses the value "9", which means
  1956.             the Host is in no way involved in the operation of TCP.  The
  1957.             value "0" indicates the Host wishes to negotiate with the
  1958.             TCP options.
  1959.  
  1960.             The normal TCP Send event is non-blocking.  That is, when a
  1961.             user issues the send command, it counts on the reliability
  1962.             services of TCP, and is not explicitly notified when the
  1963.             data has reached the other end of the connection and been
  1964.             properly acknowledged. Hence, the default value for this
  1965.             parameter with TCP is "N".  There are some applications
  1966.             where the user may not wish to receive a response to a
  1967.             Transmit command until the data has been acknowledged by the
  1968.             other end of the connection.  In these cases, the value "B"
  1969.             should be used for this parameter.  If such a feature is not
  1970.             supported by the offloaded TCP interpreter, then it is
  1971.             acceptable to issue a 100 level Conditional acceptance
  1972.             indicating that blocking is not supported, but the Begin
  1973.             command will proceed using non-blocking Transmits.
  1974.  
  1975.             The primary address components of the local and remote
  1976.             addresses refer to the internet addresses of (or a symbolic
  1977.             Host name for) the respective Hosts.  The secondary
  1978.             components refer to the particular sockets at those internet
  1979.             addresses.  Normally, the secondary components (ports) are
  1980.             specified numerically. They may, however, be specified by
  1981.             name if the port is a well-known service port. In an Active
  1982.             Begin command, the remote addresses primary and secondary
  1983.             components must be specified.  The local address components
  1984.             need not be specified, unless the user wishes to indicate
  1985.             that the connection should be from a particular port or a
  1986.             particular internet address of a multi-homed Host.  In a
  1987.             Passive Begin command, the remote addresses are specified
  1988.             only if connection attempts from one particular Host are of
  1989.             interest.  The local address secondary component must be
  1990.             used to indicate on which port to perform the Listen.
  1991.  
  1992.  
  1993.  
  1994. Lilienkamp & Mandell & Padlipsky                               [Page 35]
  1995.  
  1996.  
  1997.  
  1998. RFC 929                                                    December 1984
  1999. Proposed Host-Front End Protocol
  2000.  
  2001.  
  2002.             The way the TCP Active Open with data is provided is by
  2003.             including the data with the Begin Command.  This data is
  2004.             included in the same Channel level chunk, immediately
  2005.             following the newline.  If the data is more than a single
  2006.             chunk can hold, then the multi-chunk command feature of the
  2007.             H-FP must be used.
  2008.  
  2009.          1.2.2. Protocol-Idiosyncratic Parameters
  2010.  
  2011.             The protocol-idiosyncratic parameter identified for the TCP
  2012.             interface is the "ULP timeout" information.  This
  2013.             information includes whether the offloaded interpreter
  2014.             should abort the connection on a ULP timeout or report it to
  2015.             the inboard user, and also the numerical value of the
  2016.             timeout interval. The format chosen for this parameter is a
  2017.             single letter followed immediately (with no spaces) by an
  2018.             ASCII number. The letter can be either "R" or "A", and
  2019.             indicates that the ULP timeout should cause a report or an
  2020.             abort, respectively. The number is interpreted to be the
  2021.             timeout interval in seconds.
  2022.  
  2023.          1.2.3. Examples of the Command
  2024.  
  2025.             An example of an Active Begin command that might be issued
  2026.             by an inboard user Telnet is:
  2027.  
  2028.                C BE TCP A ISIA 9 N 23 ,, 60 R 0 -pi R120 <nl>
  2029.  
  2030.             ISIA is the destination Host, 23 is the well-known port
  2031.             number for Telnet connections, a Begin timeout of 60 seconds
  2032.             was chosen.  The desired type of service is to strive for
  2033.             good response time, the transmissions are expected to be in
  2034.             small units, and protocol-idiosyncratic parameter R120
  2035.             implies that a ULP timeout of 120 seconds should be
  2036.             reported.
  2037.  
  2038.             An example of a Passive Begin Command that might be issued
  2039.             by an inboard server Telnet is:
  2040.  
  2041.                C BE TCP P ,, 9 N ,, 23 ,, R 0 -pi R120 <nl>
  2042.  
  2043.             The major differences are that no remote address components
  2044.             are specified, and the local secondary address component is
  2045.             identified as the socket on which the Listen is being
  2046.             performed.  Also, the default ("infinite") timeout is taken.
  2047.  
  2048.  
  2049.  
  2050.  
  2051. Lilienkamp & Mandell & Padlipsky                               [Page 36]
  2052.  
  2053.  
  2054.  
  2055. RFC 929                                                    December 1984
  2056. Proposed Host-Front End Protocol
  2057.  
  2058.  
  2059.       1.3.  The Transmit Command
  2060.  
  2061.          The Transmit command is used by the Host process to instruct
  2062.          the off-loaded TCP interpreter to send data to a remote site
  2063.          via the TCP connection associated with the command's channel.
  2064.          It is used by the OPE to deliver incoming data from the
  2065.          connection to the process in the Host.
  2066.  
  2067.          1.3.1. Specialized Usage
  2068.  
  2069.             The Transmit command must be capable of providing all the
  2070.             specialized features of the Send and Deliver Event.  These
  2071.             special features are Urgent, Push, and modification of the
  2072.             ULP Timeout action and/or interval.
  2073.  
  2074.             Urgent is a means to communicate that some point upcoming in
  2075.             the data stream has been marked as URGENT by the sender.
  2076.             While the actual Urgent bit travels through the connection
  2077.             out-of-band, it carries a pointer that is related to the
  2078.             sequence numbers of the in-band communication. Hence, the
  2079.             urgency must be indicated in the Transmit command rather
  2080.             than the Signal command.
  2081.  
  2082.             Push is a feature of the TCP Send Event that is used to
  2083.             indicate that the data in the Transmit command should be
  2084.             sent immediately (within the flow control constraints),
  2085.             rather than waiting for additional send commands or a
  2086.             timeout.  Push is indicated in the Transmit Command. The
  2087.             push feature has the same meaning when sent from the OPE to
  2088.             the Host.  If the Host implementation does no internal
  2089.             queuing, the flag has no meaning.
  2090.  
  2091.             The TCP Send event permits the user to modify the "ULP
  2092.             timeout action" and/or the "ULP timeout interval" associated
  2093.             with that connection.  When changed, the new values take
  2094.             effect for the remainder of the connection, unless changed
  2095.             later with another Send.  This feature is provided in this
  2096.             H-FP using the Transmit Command.
  2097.  
  2098.          1.3.2. Protocol-Idiosyncratic Parameters
  2099.  
  2100.             The three features identified above are provided using
  2101.             protocol-idiosyncratic parameters.
  2102.  
  2103.             The first such parameter is the Urgent parameter.  From the
  2104.             point of view of the interface, it is just a flag that
  2105.             indicates the data is urgent (the actual Urgent pointer is a
  2106.  
  2107.  
  2108. Lilienkamp & Mandell & Padlipsky                               [Page 37]
  2109.  
  2110.  
  2111.  
  2112. RFC 929                                                    December 1984
  2113. Proposed Host-Front End Protocol
  2114.  
  2115.  
  2116.             concern of the off-loaded TCP interpreter, which is keeping
  2117.             track of the sequence numbers).  When issued by the Host
  2118.             process, the Urgent flag means the stream should be marked.
  2119.             When issued by the OPE, it means the receiver should go to
  2120.             (or remain in) the Urgent receive mode.  If the flag is not
  2121.             set in the Transmit issued by the OPE, then the receiver
  2122.             should remain in (or return to) the non-urgent receive mode.
  2123.             The value of this protocol-idiosyncratic parameter is "U" if
  2124.             the Urgent is set, or "N" if it is not set.  The default
  2125.             value for this parameter is "N".  Since this parameter is
  2126.             the first protocol-idiosyncratic parameter for the Transmit
  2127.             command, it requires no special flag, and can be indicated
  2128.             using the flag -pi.
  2129.  
  2130.             The second protocol-idiosyncratic parameter is the Push
  2131.             flag.  This parameter is only issued by the Host, since
  2132.             there is no Push in the TCP Deliver event.  Its value is "P"
  2133.             for push, or "N" for normal.  The default value of this
  2134.             parameter is "N".  Its control flag is -pu.
  2135.  
  2136.             The third protocol-idiosyncratic parameter is the ULP
  2137.             timeout action and value parameter.  The action part
  2138.             indicates whether the offloaded interpreter should abort the
  2139.             connection on a timeout or report it to the inboard user.
  2140.             The value part is the numerical value of the timeout
  2141.             interval.  The format used for this parameter is the same as
  2142.             in the Begin command, which is a single letter followed
  2143.             immediately (with no spaces) by an ASCII number.  The letter
  2144.             can be either "R" or "A", and indicates that the ULP timeout
  2145.             should cause a report or an abort, respectively.  The number
  2146.             is interpreted to be the timeout interval in seconds.  The
  2147.             default interpretation for this parameter is its previous
  2148.             value. The control flag for this parameter is -ul.
  2149.  
  2150.          1.3.3. Examples of the Command
  2151.  
  2152.             An example of a Transmit command issued by a Host process is
  2153.  
  2154.                C TR -pi N P R160 <nl> <DATA>
  2155.  
  2156.             where <DATA> is the data contained within the chunk.  This
  2157.             command is for a non-urgent but pushed TCP Send event, that
  2158.             also resets the timeout action and interval to Report with a
  2159.             value of 160 seconds. The response mode (i.e., nonblocking)
  2160.             is derived from the Begin command and not effected by
  2161.             transmit.
  2162.  
  2163.  
  2164.  
  2165. Lilienkamp & Mandell & Padlipsky                               [Page 38]
  2166.  
  2167.  
  2168.  
  2169. RFC 929                                                    December 1984
  2170. Proposed Host-Front End Protocol
  2171.  
  2172.  
  2173.             An example of a Transmit command issued by the OPE is
  2174.  
  2175.                C TR -pi N <nl> <DATA>
  2176.  
  2177.             where <DATA> is the data contained within the chunk.  This
  2178.             command is for a non-urgent delivery (presumably, after a
  2179.             previous Urgent delivery).
  2180.  
  2181.       1.4.  The Condition Command
  2182.  
  2183.          The Condition command is used to modify the transmission
  2184.          characteristics of the connection.  The parameters that make
  2185.          sense to modify with TCP are the Transmit Response discipline,
  2186.          the Type of Service, and the Flow Control Advice.
  2187.  
  2188.          1.4.1. Specialized Usage
  2189.  
  2190.             There is no usage of the Condition command with an offloaded
  2191.             TCP interpreter that is particularly specialized.
  2192.  
  2193.          1.4.2. Protocol-Idiosyncratic Parameters
  2194.  
  2195.             There are no protocol-idiosyncratic parameters for the
  2196.             condition command for the off-loaded TCP. It would be
  2197.             possible for the ULP timeout action values to be changed
  2198.             with a condition command.  However, this is accomplished
  2199.             with the Transmit command, which more closely models the
  2200.             interface specified in MIL-STD 1778.  We propose that the
  2201.             condition command not provide this capability.
  2202.  
  2203.          1.4.3. Examples of the Command
  2204.  
  2205.             An example of the Condition command to change the flow
  2206.             control advice for a connection is
  2207.  
  2208.                C CO -fc 1 <nl>
  2209.  
  2210.             which indicates that relatively small transmission units are
  2211.             now expected.
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220.  
  2221.  
  2222. Lilienkamp & Mandell & Padlipsky                               [Page 39]
  2223.  
  2224.  
  2225.  
  2226. RFC 929                                                    December 1984
  2227. Proposed Host-Front End Protocol
  2228.  
  2229.  
  2230.       1.5.  The Signal Command
  2231.  
  2232.          As we currently understand it, TCP's URGENT feature provides an
  2233.          INband signal rather than a true out-of-band signal (and at
  2234.          least one of us deeply regrets this).  The actual URGENT bit is
  2235.          sent out-of-band, but it contains an URGENT pointer which
  2236.          relates the URGENT to its position in the data stream.  The
  2237.          actual semantics of the URGENT is left to the higher level
  2238.          protocol (e.g., Telnet says to discard all data up to the
  2239.          URGENT pointer).  Since the Signal command is allowed to cross
  2240.          a pending Transmit in the H-FP channel, it would be potentially
  2241.          dangerous to implement the interface to TCP URGENT using the
  2242.          Signal command since the wrong sequence number could be used as
  2243.          the urgent pointer.  Barring persuasive arguments to the
  2244.          contrary, it is proposed that Signal should not be used with
  2245.          TCP.
  2246.  
  2247.       1.6.  The Status Command
  2248.  
  2249.          The Status command maps directly into the TCP Status event when
  2250.          issued by a Host process. It is also used for the TCP error
  2251.          event when issued by the OPE.  There is currently some question
  2252.          as to how information from lower protocol levels (e.g., ICMP
  2253.          error messages) should be reported to TCP users. When these
  2254.          issues are resolved, there may be other uses for the Status
  2255.          command.  We solicit other ideas for the Status command with
  2256.          this report.
  2257.  
  2258.          1.6.1. Specialized Usage
  2259.  
  2260.             The major specialized usage of the Status command is to
  2261.             provide the error reporting service.  This usage is a form
  2262.             of the Status generated by the OPE.
  2263.  
  2264.          1.6.2. Protocol-Idiosyncratic Parameters
  2265.  
  2266.             When used as a TCP Status request (command issued by the
  2267.             Host process), there are no protocol-idiosyncratic
  2268.             parameters associated with the Status command.  The OPE
  2269.             response codes the TCP status.
  2270.  
  2271.             When used as a TCP error report (command issued by the OPE),
  2272.             there is one protocol-idiosyncratic parameter associated
  2273.             with the Status command.  It is an error description in the
  2274.             form of a text string. It requires no special control flag
  2275.             since the flag -pi is unambiguous and there are no other
  2276.             protocol-idiosyncratic parameters.
  2277.  
  2278.  
  2279. Lilienkamp & Mandell & Padlipsky                               [Page 40]
  2280.  
  2281.  
  2282.  
  2283. RFC 929                                                    December 1984
  2284. Proposed Host-Front End Protocol
  2285.  
  2286.  
  2287.          1.6.3. Examples of the Command
  2288.  
  2289.             An example of the Status command issued by the Host process
  2290.             to request status information is
  2291.  
  2292.                C ST Q <nl>
  2293.  
  2294.             The status information is returned in the response to the
  2295.             status command.
  2296.  
  2297.             An example of the Status command issued by the OPE to report
  2298.             an error from the TCP interpreter is
  2299.  
  2300.                C ST R -pi "Connection already exists" <nl>
  2301.  
  2302.             which is issued when a TCP open (HFP Begin) is issued to an
  2303.             already opened (foreign) connection.
  2304.  
  2305.       1.7.  The End Command
  2306.  
  2307.          The End command is used to indicate that TCP services are no
  2308.          longer required.  Thus, it can be mapped into either the TCP
  2309.          Graceful Close or the TCP Abort events.  It is also used as the
  2310.          TCP Closing response (as contrasted with the response by the
  2311.          OPE to the close command), when issued by the OPE.
  2312.  
  2313.          1.7.1. Specialized Usage
  2314.  
  2315.             Because of the nature of the two-way close provided by TCP,
  2316.             there is a possibility that the Host and the OPE wish to
  2317.             gracefully terminate the connection at the same instant.  If
  2318.             this happens, then both the Host and the OPE would issue End
  2319.             commands at the same time.  To be prepared for this, it is
  2320.             necessary to make this the normal graceful closing sequence.
  2321.             In other words, both the Graceful Close request and the
  2322.             Closing response are mapped to End commands, and the
  2323.             response to one of those commands only indicates that the
  2324.             command has been received and executed, but not that the
  2325.             connection is actually fully closed.  The connection is
  2326.             gracefully closed when both End commands have been issued,
  2327.             and both successful responses have been received.
  2328.  
  2329.             With an abrupt end, a two-way exchange is not necessary.
  2330.             Only the Host or the OPE need issue it, for the connection
  2331.             to be aborted.
  2332.  
  2333.  
  2334.  
  2335.  
  2336. Lilienkamp & Mandell & Padlipsky                               [Page 41]
  2337.  
  2338.  
  2339.  
  2340. RFC 929                                                    December 1984
  2341. Proposed Host-Front End Protocol
  2342.  
  2343.  
  2344.          1.7.2. Protocol-Idiosyncratic Parameters
  2345.  
  2346.             There are no protocol-idiosyncratic parameters for the End
  2347.             command used with TCP.
  2348.  
  2349.          1.7.3. Examples of the Command
  2350.  
  2351.             An example of the End command used to indicate either a TCP
  2352.             Close request (from the Host process) or TCP Closing
  2353.             response (from the OPE) is
  2354.  
  2355.                C EN G <nl>
  2356.  
  2357.             An example of the End command used as an Abort request (from
  2358.             the Host process) or as a Terminate response is
  2359.  
  2360.                C EN A <nl>
  2361.  
  2362.    2.  Command Level Interface to an Off-loaded Telnet
  2363.  
  2364.       This appendix is provided to discuss the use of the commands
  2365.       described in the body of this document to provide an interface
  2366.       between a Host process and an off-loaded interpreter of the Telnet
  2367.       protocol.
  2368.  
  2369.       The interface described here is not based on a formal interface.
  2370.       There are several reasons for this, including the lack of a widely
  2371.       accepted standard interface to Telnet, and its headerless nature.
  2372.       Consequently, the interface described here is very similar to the
  2373.       actual Telnet data stream.
  2374.  
  2375.       2.1.  The Begin Command
  2376.  
  2377.          The Begin command is used with Telnet to initiate Telnet
  2378.          connections.
  2379.  
  2380.          2.1.1. Specialized Usage
  2381.  
  2382.             There are three major specialized usages to the Begin
  2383.             command.  They are the meaning of the Mediation Level
  2384.             parameter, the way the number of incoming Telnet connections
  2385.             are supported, and the meaning of the secondary address
  2386.             components.
  2387.  
  2388.             The mediation level is used in Telnet to control which of
  2389.             the various Telnet activities are performed by the OPE, and
  2390.             which are controlled by the Host.  It has been determined
  2391.  
  2392.  
  2393. Lilienkamp & Mandell & Padlipsky                               [Page 42]
  2394.  
  2395.  
  2396.  
  2397. RFC 929                                                    December 1984
  2398. Proposed Host-Front End Protocol
  2399.  
  2400.  
  2401.             that all monitoring of the Telnet Socket should be performed
  2402.             by the OPE.  Mediation level 9, which is the default,
  2403.             indicates the Host desires to play no role in Telnet
  2404.             operation. Level 5 means that protocol-idiosyncratic
  2405.             parameters to this Begin command indicate which incoming
  2406.             options the Host wishes to handle; all other options, and
  2407.             all NVT translations, are to be performed by the OPE. Level
  2408.             0 indicates that the Host will handle all options, while all
  2409.             NVT translations are to be performed in the OPE (see Section
  2410.             B.1.3).
  2411.  
  2412.             The Host can either accept the connections by fielding OPE
  2413.             generated Begins, or by issuing passive Begins to the OPE.
  2414.             The Host may wish to restrict the number of incoming Telnet
  2415.             connections that it will handle at any particular time.  It
  2416.             can do this by rejecting OPE-generated Begins above a
  2417.             certain number, or by limiting the number of Host-issued
  2418.             passive Begins.  However, precedence constraints dictate
  2419.             that the Host actually issue additional passive Begins or
  2420.             accept additional Begins from the OPE beyond the maximum
  2421.             number it is normally willing to support, so that
  2422.             high-priority service requests can be accommodated, possibly
  2423.             by preempting lower priority activities.
  2424.  
  2425.             The secondary address component is used to refer to specific
  2426.             ports. Normally, they are used only when the standard or
  2427.             default ports are not used, such as special purpose
  2428.             applications or testing.
  2429.  
  2430.          2.1.2. Protocol-Idiosyncratic Parameters
  2431.  
  2432.             The protocol-idiosyncratic parameters to the Telnet Begin
  2433.             command are the identifiers for the options which the host
  2434.             wishes to negotiate when using mediation level 5.  On other
  2435.             mediation levels, these parameters are not used.
  2436.  
  2437.          2.1.3. Examples of the Command
  2438.  
  2439.             An example of a passive Begin for an outboard Telnet
  2440.             protocol is:
  2441.  
  2442.                C BE TEL P ,, 5 N -fc 0 -pi 9 <nl>
  2443.  
  2444.             Where the parameters are:
  2445.  
  2446.                TEL   Code for the Telnet Protocol
  2447.                P     Passive Begin
  2448.  
  2449.  
  2450. Lilienkamp & Mandell & Padlipsky                               [Page 43]
  2451.  
  2452.  
  2453.  
  2454. RFC 929                                                    December 1984
  2455. Proposed Host-Front End Protocol
  2456.  
  2457.  
  2458.                ,,    Skip the Foreign Address Primary Component
  2459.                5     Mediation Level is 5
  2460.                N     Non Blocking Transmits
  2461.                -fc   Skips over parameters up to Flow Control Advice
  2462.                S     Small Blocks are appropriate for Telnet
  2463.                -pi   Skips over parameters to the Protocol Idiosyncratic
  2464.                      List of Options to be Handled by the Host.
  2465.                9     Option Code for Line Length Option
  2466.  
  2467.             Here, no remote address component was specified, since the
  2468.             Host will accept connections from any Host.  Similarly, no
  2469.             local addresses are specified, since the default well-known
  2470.             socket for this Host is to be used.  In this example, the
  2471.             Host specifies it will handle the line length option (number
  2472.             9).  Other options are handled in the OPE.
  2473.  
  2474.             An example of an active Begin for an outboard Telnet
  2475.             protocol is:
  2476.  
  2477.                C BE TEL A ISIA 5 N -fc 0 -pi 9 <nl>
  2478.  
  2479.             This command is identical to the passive command, except
  2480.             that a remote primary address component is specified to
  2481.             identify the intended Host.  No remote secondary component
  2482.             is specified, since the well-known socket at that Host is to
  2483.             be used.  No local secondary address components are
  2484.             specified, since the connection can originate from any
  2485.             available socket of the appropriate type selected by the
  2486.             OPE.
  2487.  
  2488.       2.2.  The Transmit Command
  2489.  
  2490.          The Transmit Command is used to send data across a Telnet
  2491.          connection.
  2492.  
  2493.          2.2.1. Specialized Usage
  2494.  
  2495.             The Transmit command is used to transmit data over the
  2496.             Telnet connection.  There is one specialized aspect of the
  2497.             Transmit command used with an outboard Telnet interpreter.
  2498.             This is the provision of the Go Ahead feature of Telnet that
  2499.             supports half-duplex devices.
  2500.  
  2501.             Go Ahead is provided as a protocol idiosyncratic parameter
  2502.             to the Transmit.  It is only used if the Host will support
  2503.             it, however.  It is our opinion that Go Ahead is probably
  2504.             not a proper thing for the default case.
  2505.  
  2506.  
  2507. Lilienkamp & Mandell & Padlipsky                               [Page 44]
  2508.  
  2509.  
  2510.  
  2511. RFC 929                                                    December 1984
  2512. Proposed Host-Front End Protocol
  2513.  
  2514.  
  2515.             Go Aheads are a matter between the Host and the terminal. It
  2516.             is difficult to offload the generation of Go Aheads to the
  2517.             OPE, since the OPE is not really cognizant of the semantics
  2518.             of the communication between the Host and the terminal.
  2519.             Hence, the OPE does not know when the Host is done
  2520.             transmitting and willing to pass "the turn" back to the
  2521.             terminal. Similarly when the remote site relinquishes
  2522.             control, the OPE includes Go Ahead in its TR.
  2523.  
  2524.             We don't believe this Go Ahead problem to be an indictment
  2525.             against outboard processing.  It merely illustrates that
  2526.             functionality not found in a Host cannot necessarily be
  2527.             provided by the OPE.  Hence, we provide this note to the
  2528.             implementor:  if the Host cannot generate the
  2529.             protocol-idiosyncratic Go Ahead parameter, then the DO
  2530.             Suppress Go Ahead must be issued immediately after the
  2531.             connection is established.
  2532.  
  2533.          2.2.2. Protocol Idiosyncratic Parameters
  2534.  
  2535.             The protocol idiosyncratic parameter is the Go Ahead
  2536.             indicator.  When present, the character "G" is used to mean
  2537.             the Go Ahead can be sent to the other end of the connection,
  2538.             but only after the data associated with that Transmit
  2539.             command is sent.  When the character is any other value, or
  2540.             is absent, the Go Ahead should not be sent.
  2541.  
  2542.          2.2.3. Examples of the Command
  2543.  
  2544.             An example of the Transmit command is:
  2545.  
  2546.                C TR -pi G <nl> <DATA>
  2547.  
  2548.             With this command, the Go Ahead is passed to the other side
  2549.             after the data is sent.
  2550.  
  2551.       2.3.  The Condition Command
  2552.  
  2553.          The Condition command is used with Telnet to modify the
  2554.          Transmission characteristics and to enable or disable Telnet
  2555.          options on a Telnet connection.
  2556.  
  2557.          2.3.1. Specialized Usage
  2558.  
  2559.             The Condition command takes on specialized usage with
  2560.             Telnet, in addition to its normal usage.  It is used to
  2561.  
  2562.  
  2563.  
  2564. Lilienkamp & Mandell & Padlipsky                               [Page 45]
  2565.  
  2566.  
  2567.  
  2568. RFC 929                                                    December 1984
  2569. Proposed Host-Front End Protocol
  2570.  
  2571.  
  2572.             control the option selection and negotiation process, when
  2573.             such selection is performed by the Host (currently, this is
  2574.             done at mediation levels 5 and 1, but not at level 9).
  2575.  
  2576.             A set of protocol-idiosyncratic parameters has been defined
  2577.             for this purpose.  They are based heavily on the Telnet
  2578.             negotiation and subnegotiation mechanisms.  For simple
  2579.             negotiations there are two parameters, a negotiation type
  2580.             (from the set {DO, DONT, WILL, WONT}) followed by the code
  2581.             (numeric) or name (symbolic) for the desired option.  The
  2582.             codes for the options are identified below.  A basic
  2583.             difference between the H-FP interface to Telnet and the
  2584.             internal Telnet protocol is that additional parameters are
  2585.             included with the request (DO or WILL). The Telnet protocol
  2586.             subnegotiation is used internally to communicate that
  2587.             information in the Telnet data stream.  Option-specific,
  2588.             protocol-idiosyncratic parameters are used for these
  2589.             additional parameters.
  2590.  
  2591.             Both the Host and the OPE can issue these Condition
  2592.             commands. When issued by the Host, it means the user wishes
  2593.             to enable or disable a particular option. The OPE proceeds
  2594.             to issue the appropriate negotiation commands (i.e., IAC
  2595.             <DO> <code>) in the Telnet data stream.  When the results of
  2596.             the option negotiation are available, a response is
  2597.             generated by the OPE.  For the types DO and WILL, a 000
  2598.             Response indicates the appropriate acceptance (WILL or DO,
  2599.             respectively). A nonzero Response code may indicate
  2600.             negotiation failure or negotiation rejection (among other
  2601.             things).  For the types DONT and WONT, a 000 Response
  2602.             indicates the option will be disabled.  A negotiation
  2603.             rejection should not be expected in those cases.
  2604.  
  2605.             When the Condition command is issued by the OPE, it means
  2606.             the other end of the connection is negotiating a change.
  2607.             Here the response from the Host indicates the Host's desired
  2608.             action for the option negotiation.  Again, valid requests to
  2609.             disable options (DONT and WONT requests) should always get a
  2610.             000 Response.
  2611.  
  2612.          2.3.2. Protocol-Idiosyncratic Parameters
  2613.  
  2614.             There are two protocol-idiosyncratic parameters for primary
  2615.             negotiation using the Condition command.  These are the
  2616.             negotiation type and the option code.  The negotiation type
  2617.             is one of the set of {DO, DONT, WILL, WONT}.  The option
  2618.             code is a numeric value used to identify the particular
  2619.  
  2620.  
  2621. Lilienkamp & Mandell & Padlipsky                               [Page 46]
  2622.  
  2623.  
  2624.  
  2625. RFC 929                                                    December 1984
  2626. Proposed Host-Front End Protocol
  2627.  
  2628.  
  2629.             option being negotiated.  The values for these codes are
  2630.             indicated here, but are identical to the codes used in the
  2631.             actual Telnet negotiation.  The codes are:
  2632.  
  2633.                Option Name     Option Code       Short Name
  2634.  
  2635.                Transmit Binary           0       Binary
  2636.                Echo                      1       Echo
  2637.                Suppress Go-Ahead         3       SuppressGA
  2638.                Approximate Message Size  4       NAMS
  2639.                Status                    5       Status
  2640.                Timing Mark               6       TimingMark
  2641.                RCTE                      7       RCTE
  2642.                Line Length               8       LineLength
  2643.                Page Size                 9       PageSize
  2644.                Carriage Return Disp     10       CRDisp
  2645.                Horizontal Tabstops      11       HTabStops
  2646.                Horizontal Tab Disp      12       HTabDisp
  2647.                Formfeed Disposition     13       FFDisp
  2648.                Vertical Tabstops        14       VTabStops
  2649.                Vertical Tab Disposition 15       VTabDisp
  2650.                Linefeed Disposition     16       LFDisp
  2651.                Extended ASCII           17       ExASCII
  2652.                Logout                   18       Logout
  2653.                Data Entry Terminal      20       DET
  2654.                Terminal Type            24       TermType
  2655.                Extended options list   255       ExOptions
  2656.  
  2657.             Options not listed here may of course be used. The code
  2658.             number should be the same as the option code used in Telnet
  2659.             negotiation.
  2660.  
  2661.             2.3.2.1.  Simple Options
  2662.  
  2663.                Options that do not require additional parameters use the
  2664.                simple negotiation mechanisms described briefly above and
  2665.                in greater detail in the Telnet documentation.  No
  2666.                additional parameters are required.  These options
  2667.                include the Transmit Binary, Echo, Suppress Go Ahead,
  2668.                Status, Timing Mark, and Logout options.
  2669.  
  2670.             2.3.2.2.  Approximate Message Size Option
  2671.  
  2672.                The Approximate Message Size option requires two
  2673.                parameters. The first indicates whether the approximate
  2674.                message size being negotiated applies to the local or the
  2675.                remote end of the connection.  DS means the size applies
  2676.  
  2677.  
  2678. Lilienkamp & Mandell & Padlipsky                               [Page 47]
  2679.  
  2680.  
  2681.  
  2682. RFC 929                                                    December 1984
  2683. Proposed Host-Front End Protocol
  2684.  
  2685.  
  2686.                to the sender of the command (i.e., if the Host issues
  2687.                the command, DS means the local end of the connection;
  2688.                if issued by the OPE, DS means the remote end of the
  2689.                connection).  DR means the size applies to the receiver
  2690.                of the command (i.e., if the Host issues the command, DR
  2691.                means the remote end;  if issued by the OPE, DR means the
  2692.                local end of the connection).  This convention is
  2693.                consistent with the Telnet subnegotiation mechanisms.
  2694.                The second character is an ASCII encoded numeric value,
  2695.                which is a character count of the message size.
  2696.  
  2697.          2.3.3. Line Width and Page Size Options
  2698.  
  2699.             The Line Width and Page Size Options require two additional
  2700.             parameters.  The first indicates whether the line width or
  2701.             page size being negotiated applies to the local or the
  2702.             remote end of the connection, and uses the DS and DR
  2703.             convention described above.  The second parameter is an
  2704.             ASCII encoded numeric value, which is interpreted as follows
  2705.             (assuming the Condition command was issued by the Host):
  2706.  
  2707.                0         The Host requests that it handle length or size
  2708.                          considerations for the direction indicated by
  2709.                          the first parameter.
  2710.  
  2711.                1 to 253  The Host requests that the remote end handle
  2712.                          the size or length considerations for the
  2713.                          direction indicated by the first parameter, but
  2714.                          suggests that the value indicated be used as
  2715.                          the size or length.
  2716.  
  2717.                254       The Host requests that the remote end handle
  2718.                          the size or length considerations for the
  2719.                          direction indicated by the first parameter, but
  2720.                          suggests that the size or length be considered
  2721.                          to be infinity.
  2722.  
  2723.                255       The Host requests that the remote end handle
  2724.                          the tabstop considerations, and suggests
  2725.                          nothing about what the value should be.
  2726.  
  2727.             If the Condition command is issued by the OPE, then the
  2728.             roles of the Host and the remote end are reversed.
  2729.  
  2730.  
  2731.  
  2732.  
  2733.  
  2734.  
  2735. Lilienkamp & Mandell & Padlipsky                               [Page 48]
  2736.  
  2737.  
  2738.  
  2739. RFC 929                                                    December 1984
  2740. Proposed Host-Front End Protocol
  2741.  
  2742.  
  2743.          2.3.4. Tabstop Options
  2744.  
  2745.             The Horizontal and Vertical Tabstops options require two
  2746.             option specific parameters.  The first is either DR or DS,
  2747.             as was described previously.  The second is a list of one or
  2748.             more ASCII encoded numeric values separated by spaces which,
  2749.             assuming the Condition command is issued by the Host, are
  2750.             individually interpreted as:
  2751.  
  2752.                0         The Host requests that it handle tabstops for
  2753.                          the direction indicated by the first parameter.
  2754.  
  2755.                1 to 250  The Host requests that the remote end handle
  2756.                          the tabstop considerations for the direction
  2757.                          indicated by the first parameter, but suggests
  2758.                          that the value(s) indicated should be used as
  2759.                          the tabstops.
  2760.  
  2761.                255       The Host requests that the remote end handle
  2762.                          the tabstop considerations for the direction
  2763.                          indicated by the first parameter, and suggests
  2764.                          nothing about what the value should be.
  2765.  
  2766.             If the Condition command is issued by the OPE, then the
  2767.             roles of the Host and the remote end are reversed.
  2768.  
  2769.          2.3.5. Character Disposition Options
  2770.  
  2771.             The Carriage Return Disposition option, the Horizontal Tab
  2772.             Disposition option, the  Formfeed Disposition option, the
  2773.             Vertical Tab Disposition option, and the Linefeed
  2774.             Disposition option are all considered character disposition
  2775.             options from the perspective of H-FP.  Two option-specific
  2776.             parameters are required for the character disposition
  2777.             options.  The first is the DR or DS code, which was
  2778.             described previously. The second is a single ASCII encoded
  2779.             numeric value, which is interpreted as (assuming that the
  2780.             Host issued the Condition command):
  2781.  
  2782.                0         The Host requests that it handle the character
  2783.                          disposition for this connection.
  2784.  
  2785.                1 to 250  The Host suggests that the remote end handle
  2786.                          the character disposition considerations, but
  2787.                          suggests that the value indicated should be
  2788.                          taken as the number of nulls which should be
  2789.  
  2790.  
  2791.  
  2792. Lilienkamp & Mandell & Padlipsky                               [Page 49]
  2793.  
  2794.  
  2795.  
  2796. RFC 929                                                    December 1984
  2797. Proposed Host-Front End Protocol
  2798.  
  2799.  
  2800.                          inserted in the data stream following the
  2801.                          particular format character being
  2802.                          subnegotiated.
  2803.  
  2804.                251       The Host suggests that the remote end handle
  2805.                          the character disposition considerations, but
  2806.                          recommends that it replace the character with
  2807.                          some simplified character similar to but not
  2808.                          identical with it (e.g., replace a tab with a
  2809.                          space, or a formfeed with a newline).
  2810.  
  2811.                252       The Host suggests that the remote end handle
  2812.                          the character disposition considerations, but
  2813.                          recommends that it discard the character.
  2814.  
  2815.                253       The Host suggests that the remote end handle
  2816.                          the character disposition, but recommends that
  2817.                          the effect of the character be simulated using
  2818.                          other characters such as spaces or linefeeds.
  2819.  
  2820.                254       The Host suggests that the remote end handle
  2821.                          the character disposition considerations, but
  2822.                          recommends that it wait for additional data
  2823.                          before sending more data.
  2824.  
  2825.                255       The Host suggests that the remote end handle
  2826.                          the tabstop considerations, and suggests
  2827.                          nothing about what the value should be.
  2828.  
  2829.             Some of the codes between 251 and 254 are not used with some
  2830.             character disposition options. Refer to the ARPANET
  2831.             documentation for additional details.
  2832.  
  2833.             If the Condition command is issued by the OPE, then the
  2834.             roles of the Host and the remote end are reversed.
  2835.  
  2836.             2.3.5.1.  RCTE Option
  2837.  
  2838.                The Remote Controlled Transmission and Echoing option
  2839.                requires parameters to indicate the sets of break
  2840.                characters and transmit characters.  There are two
  2841.                option-idiosyncratic parameters for RCTE.  The first is a
  2842.                list of the character classes that make up the set of
  2843.                break characters, as defined in the RCTE documentation.
  2844.                The second is a list of character classes that make up
  2845.                the set of transmit characters, as defined in the RCTE
  2846.                documentation.  Since the two classes are optional and
  2847.  
  2848.  
  2849. Lilienkamp & Mandell & Padlipsky                               [Page 50]
  2850.  
  2851.  
  2852.  
  2853. RFC 929                                                    December 1984
  2854. Proposed Host-Front End Protocol
  2855.  
  2856.  
  2857.                can be of arbitrary length, it is necessary to precede
  2858.                each list with a -bc (break characters) or -tc (transmit
  2859.                characters). The character classes are defined as
  2860.  
  2861.                   1 Upper Case Letters   A through Z
  2862.                   2 Lower Case Letters   a through z
  2863.                   3 Digits  0 through 9
  2864.                   4 Format effectors  <BS> <CR> <LF> <FF> <HT> <VT>
  2865.                   5 Non-format control codes, plus <ESC> and <DEL>
  2866.                   6 Punctuation  . , ; : ? !
  2867.                   7 Grouping    { [ ( < > ) ] }
  2868.                   8 Misc  ' ` " / \ % @ $ &   + - * = ^ _ | ~
  2869.                   9 <space>
  2870.  
  2871.             2.3.5.2.  Extended Option List
  2872.  
  2873.                The Extended Option List option requires a parameter to
  2874.                carry the number of the option on the extended list.
  2875.                There is thus one option specific parameter to the
  2876.                Condition command when used for this purpose, which is
  2877.                the number of the option on the extended option list.  It
  2878.                can be expressed in ASCII using an octal, decimal, or
  2879.                hexadecimal format.
  2880.  
  2881.             2.3.5.3.  Terminal Extension Options
  2882.  
  2883.                The Extended ASCII, SUPDUP, and Data Entry Terminal
  2884.                options of Telnet were all attempts to extend the basic
  2885.                capabilities of the Telnet data stream beyond the simple,
  2886.                scroll mode terminal model that was the basis of the
  2887.                original Telnet design.
  2888.  
  2889.                All of these options have limitations to their
  2890.                effectiveness.  The Extended ASCII option lacks a
  2891.                standardized interpretation of the bit patterns into
  2892.                extended ASCII characters.  The SUPDUP effort was
  2893.                actually an independent mode where a different virtual
  2894.                terminal protocol was used, and the option was there
  2895.                merely to switch to and from this protocol. The Data
  2896.                Entry Terminal option requires the excessive overhead of
  2897.                subnegotiation for each use of extended features.  All of
  2898.                these options lack the more valuable asset of widespread
  2899.                implementation and use.
  2900.  
  2901.                The way these options should be handled is not detailed
  2902.                in this appendix. It is clear that the Condition command
  2903.                could be used for initiating and terminating the use of
  2904.  
  2905.  
  2906. Lilienkamp & Mandell & Padlipsky                               [Page 51]
  2907.  
  2908.  
  2909.  
  2910. RFC 929                                                    December 1984
  2911. Proposed Host-Front End Protocol
  2912.  
  2913.  
  2914.                these options.  The actual transmission of characters
  2915.                related to the extended terminal features should be
  2916.                provided by the Transmit command, either as part of the
  2917.                normal Host-to-OPE data stream or by using
  2918.                protocol-idiosyncratic parameters.
  2919.  
  2920.                A more recent option, the Terminal Type option, should be
  2921.                mentioned here.  It permits one end of a connection to
  2922.                request information about the terminal at the other end
  2923.                or send information about the terminal at the local end.
  2924.                This is convenient for systems that provide a wide
  2925.                variety of terminal support, but it clearly does not
  2926.                follow the model of reducing the MxN problem by use of a
  2927.                virtual terminal. Its use is very straightforward in the
  2928.                H-FP context.  It only requires sending the terminal type
  2929.                to the other end, and activating the Binary Transmission
  2930.                Option.
  2931.  
  2932.             2.3.5.4.  Status Option
  2933.  
  2934.                The Status option is enabled using the negotiation
  2935.                mechanism of Telnet.  However, the means to transfer
  2936.                status information between OPE and the Host is provided
  2937.                via the Status command.  Therefore, details of status
  2938.                negotiation are irrelevant to the interface to the
  2939.                outboard Telnet.
  2940.  
  2941.          2.3.6. Examples of the Command
  2942.  
  2943.             The following example shows the command issued by a Host to
  2944.             the OPE, requesting that the OPE negotiate with the other
  2945.             side so that remote echo is performed.
  2946.  
  2947.                C CO -pi DO 1 <nl>
  2948.  
  2949.             The numeral 1 is the option code for ECHO from the table
  2950.             above. All of the simple options listed above use this same
  2951.             basic format.
  2952.  
  2953.             The options with additional parameters use straightforward
  2954.             extensions of this syntax.  For example, a possible usage of
  2955.             Condition by the Host to set the approximate message size
  2956.             is:
  2957.  
  2958.                C CO -pi DO 4 DS 1024
  2959.  
  2960.  
  2961.  
  2962.  
  2963. Lilienkamp & Mandell & Padlipsky                               [Page 52]
  2964.  
  2965.  
  2966.  
  2967. RFC 929                                                    December 1984
  2968. Proposed Host-Front End Protocol
  2969.  
  2970.  
  2971.             The 4 is the Option Code for the Approximate Message Size
  2972.             option, the DS indicates that Host's message size should be
  2973.             set, and 1024 is the desired size.
  2974.  
  2975.       2.4.  The Signal Command
  2976.  
  2977.          The Signal command is used with Telnet to provide the Telnet
  2978.          Interrupt Process and Abort Output services.
  2979.  
  2980.          2.4.1. Specialized Usage
  2981.  
  2982.             The Signal command is used with an outboard Telnet
  2983.             interpreter to interface to the Telnet synch mechanism.
  2984.             This mechanism is used with a protocol-idiosyncratic
  2985.             parameter, which indicates what particular command is being
  2986.             "synched." It is expected that normally, this Signal
  2987.             mechanism will only be used with the Interrupt Process and
  2988.             Abort Output Telnet signals.  When the Signal command is
  2989.             issued by the Host, it goes through the Channel
  2990.             (out-of-band) to the OPE, where the Telnet interpreter
  2991.             issues the corresponding Telnet signal and synch sequence.
  2992.             When such a sequence is received by the OPE, it immediately
  2993.             issues a Signal to the Host.  It is expected that a Host or
  2994.             OPE would not, in general, reject the Signal command unless
  2995.             it is badly formed.
  2996.  
  2997.          2.4.2. Protocol-Idiosyncratic Parameters
  2998.  
  2999.             The Telnet protocol-idiosyncratic parameter used with the
  3000.             Signal command identifies which Telnet signal is begin
  3001.             issued.  Normally, it would have the value of either "IP" or
  3002.             "AO", for Interrupt Process or Abort Output.  If absent, the
  3003.             default value is "IP".
  3004.  
  3005.          2.4.3. Examples of the Command
  3006.  
  3007.             An example of a Telnet Signal Command (in this case, to send
  3008.             an Interrupt Process signal) is:
  3009.  
  3010.                C SI IP <nl>
  3011.  
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017.  
  3018.  
  3019.  
  3020. Lilienkamp & Mandell & Padlipsky                               [Page 53]
  3021.  
  3022.  
  3023.  
  3024. RFC 929                                                    December 1984
  3025. Proposed Host-Front End Protocol
  3026.  
  3027.  
  3028.       2.5.  The Status Command
  3029.  
  3030.          The Status command is used with Telnet to obtain information
  3031.          about the Telnet connection and the options in effect.
  3032.  
  3033.          2.5.1. Specialized Usage
  3034.  
  3035.             The Status command has one specialized aspect when used to
  3036.             interface to an outboard Telnet interpreter.  That is to
  3037.             send and receive the Telnet Protocol status request
  3038.             subnegotiation message to and from the data stream.  In
  3039.             order to invoke the status command for this purpose,
  3040.             however, the user must have previously issued the Condition
  3041.             Status command, which causes the ability to request status
  3042.             to be negotiated.  The OPE, when it receives a valid Status
  3043.             request command, immediately responds to the user indicating
  3044.             the status.  The OPE can issue a status to request the
  3045.             Host's negotiated positions.
  3046.  
  3047.          2.5.2. Protocol-Idiosyncratic Parameters
  3048.  
  3049.             There are no protocol-idiosyncratic parameters to the Status
  3050.             query command. The Status Response command has a single
  3051.             protocol-idiosyncratic parameter.  It is an ASCII string
  3052.             containing the status of the various options (not at their
  3053.             default values).
  3054.  
  3055.          2.5.3. Examples of the Command
  3056.  
  3057.             An example of a Status Query command is:
  3058.  
  3059.                C ST Q
  3060.  
  3061.             An example of a Status Response command is:
  3062.  
  3063.                F ST R "WILL ECHO  DO SUPPRESS-GO-AHEAD
  3064.                L WILL STATUS  DO STATUS" <nl>
  3065.  
  3066.             In the previous example, note the opening quote is in the
  3067.             first chunk, and the closing quote is in the last chunk.
  3068.             This technique permits parameters to span chunk boundaries.
  3069.  
  3070.  
  3071.  
  3072.  
  3073.  
  3074.  
  3075.  
  3076.  
  3077. Lilienkamp & Mandell & Padlipsky                               [Page 54]
  3078.  
  3079.  
  3080.  
  3081. RFC 929                                                    December 1984
  3082. Proposed Host-Front End Protocol
  3083.  
  3084.  
  3085.       2.6.  The End Command
  3086.  
  3087.          The End command is used to terminate the Telnet connection,
  3088.          either gracefully or abruptly.
  3089.  
  3090.          2.6.1. Specialized Usage
  3091.  
  3092.             The graceful termination of a Telnet requires End commands
  3093.             to be issued by both the Host and the OPE.  This specialized
  3094.             usage is identical to that of the outboard TCP interface,
  3095.             however.
  3096.  
  3097.          2.6.2. Examples of the Command
  3098.  
  3099.             An example of the graceful End command is:
  3100.  
  3101.                C EN G <nl>
  3102.  
  3103.             The abrupt End command is similar.
  3104.  
  3105.       2.7.  The No-op Command
  3106.  
  3107.          The No-op command is used with Telnet so the Host can determine
  3108.          if the OPE is active, and vice versa.
  3109.  
  3110.          2.7.1. Specialized Usage
  3111.  
  3112.             The No-op command has one specialized usage when offloading
  3113.             Telnet.  This is to provide the Telnet Are You There (AYT)
  3114.             feature.  When an (AYT) message is received by the OPE, it
  3115.             issues a No-op command to the Host. Upon receiving the
  3116.             response from the Host, the appropriate response is sent
  3117.             back in the data stream.
  3118.  
  3119.          2.7.2. Protocol Idiosyncratic Parameters
  3120.  
  3121.             There are no protocol-idiosyncratic parameters to the No-op
  3122.             command.
  3123.  
  3124.          2.7.3. Examples of the Command
  3125.  
  3126.             An example of the No-op command is:
  3127.  
  3128.                C NO <nl>
  3129.  
  3130.  
  3131.  
  3132.  
  3133.  
  3134. Lilienkamp & Mandell & Padlipsky                               [Page 55]
  3135.  
  3136.  
  3137.  
  3138. RFC 929                                                    December 1984
  3139. Proposed Host-Front End Protocol
  3140.  
  3141.  
  3142.    3. FTP Offloading
  3143.  
  3144.       TBS
  3145.  
  3146.    4. Mail Offloading
  3147.  
  3148.       TBS
  3149.  
  3150.    5. Whatever Offloading
  3151.  
  3152.       TBS
  3153.  
  3154.    Where TBS nominally = To Be Supplied, but really means: We'll argue
  3155.    through these once we get sufficiently positive feedback on the
  3156.    others (and on the H-FP as a whole).
  3157.  
  3158.  
  3159.  
  3160.  
  3161.  
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.  
  3177.  
  3178.  
  3179.  
  3180.  
  3181.  
  3182.  
  3183.  
  3184.  
  3185.  
  3186.  
  3187.  
  3188.  
  3189.  
  3190.  
  3191. Lilienkamp & Mandell & Padlipsky                               [Page 56]
  3192.  
  3193.